2010-08-08 15 views
7

He vivido en el mundo de los escritorios la mayor parte de mi carrera, así que discúlpeme por hacer una pregunta tan básica, pero no estoy muy seguro de por dónde empezar.Incrustar datos brutos en HTML para analizar en jQuery

Quiero devolver algunos datos brutos junto con mi HTML, y analizar y mostrar los datos usando jQuery tan pronto como el HTML esté listo. Sé aproximadamente cuál debería ser mi código js, ​​pero no estoy seguro de cómo debería incrustar los datos sin procesar en mi HTML.

Podría usar $ .getJSON(), pero sería mejor si pudiera tener los datos directamente en mi HTML.

Creo que funcionaría json o XML, pero ¿cuál es la forma correcta de escapar/incrustar/analizar estos cuando están incrustados en HTML?

Gracias de antemano.

+0

¿Qué tipo de datos serían y cómo sería el resultado final? ¿Puedes hacer un ejemplo? –

+0

Los datos son una lista de etiquetas, nombres y valores para campos de entrada de formulario. Quiero generar las etiquetas de forma dinámica, porque de lo contrario tendré que hacer el código HTML dos veces, una para el contenido inicial y otra vez incrustada en cadenas js para emitir usando jQuery cuando agregue más campos. –

Respuesta

7

Puede colocar los datos JSON en un div oculto, luego decodificarlos y usarlos desde jQuery.

Por ejemplo, vamos a tomar:

{"foo":"apple","bar":"orange"} 

escape y lo ponemos en un div:

<div id="data">%7B%22foo%22%3A%22apple%22%2C%22bar%22%3A%22orange%22%7D</div> 

Luego de jQuery, podemos utilizar los datos:

var data = jQuery.parseJSON(unescape($("#data").html())); 

Entonces, llamar al alert(data.foo) nos dará apple.

Here's a working example.

1

Como has dicho que es probablemente el mejor para conseguirlo a través de Ajax usando $ .post o $ .get o .load (elemento) $(), etc ...

Pero si debe guardarlo en la página es común guardar en un campo oculto. Asp.net guarda cosas en campos ocultos usando la serialización binaria y Base64 pero puede guardarlo como una cadena Json y luego usarlo en su JS.

5

Dónde y Cuándo quiere estos datos?

Si lo desea, en su opinión, sólo tiene que pasar los datos a la vista

Acción/controlador:

public ActionResult MyAction() 
{ 
    ViewData["MyData"] = "this is a sample data of type string"; 
    return View(); 
} 

Y luego, en algún lugar de su punto de vista:

<script> 
    var data = '<%= ViewData["MyData"] %>'; 
    $(document).ready(){ 
     alert(data); 
    } 
</script> 
<h1><%: ViewData["MyData"] %></h1> 

De Por supuesto, si está trabajando con List<string> o `cadena [] ', debería formatearlo en el JavaScript adecuado para que jQuery lo entienda.

<script> 
    var dataArray = [ 

    <% foreach(string s in (string[])ViewData["MyDataArray"]){ %> 
     <%= s %>, 
    <% } %> 
    ]; 
</script> 

Sería captador Si ha generado el código JavaScript adecuado en la acción en lugar de la vista para evitar fea marcado en su opinión:

public ActionResult MyAction() 
{ 
    string[] myArray = new string[]{ "hello", "wolrd" }; 
    ViewData["MyData"] = myArray; 
    ViewData["JavaScriptArray"] = "[" + myArray.Aggregate((current,next) => string.Format("'{0}','{1}',", current, next).TrimEnd(new char[] { ','})) + "]"; 
    // or you can use your favorite JavaScript serialize 
    return View(); 
} 

Ahora usted puede hacer lo siguiente en su opinión:

<script> 
    var dataArray = <%= ViewData["MyJavaScriptArray"] %>; 
    alert(dataArray[0]); // alerts 'hello' 
</script> 
Cuestiones relacionadas