2008-12-26 15 views
18

Así que tengo una matriz de registros recuperados de una base de datos. La matriz está en el formato;La mejor manera de transferir una matriz entre PHP y Javascript

$rows[0]['id']=1; 
$rows[0]['title']='Abc'; 
$rows[0]['time_left']=200; 


$rows[1]['id']=2; 
$rows[1]['title']='XYZ'; 
$rows[1]['time_left']=300; 
//And so on upto 10-20 rows 

¿Cuál es la mejor forma de transferir esta matriz a mi código de JavaScript? Me gustaría que el javascript pueda recorrer todos los registros y, usando el atributo 'id', actualice el div con ese id con algo de información.

Mi código de JavaScript está en un archivo .js externo, pero puedo ejecutar el código de PHP en el código HTML de mi página. Así que podría hacer algo como esto:

En my_file.js:

var rows=New Array(); 

en el código HTML:

<html> 
<head> 
<script type="text/javascript" src="js/my_file.js"></script> 

<script type="text/javascript"> 
<? foreach ($rows as $row):?> 
<? extract($row);?> 
rows[<?=$id;?>]['title']="<?=$title;?>"; 
//And so on 
<? endforeach;?> 
</script> 

Respuesta

28

que tienden a utilizar un objeto JSON para esto:

  • En el lado del servidor, JSON codifica su da ta: json_encode($data);
  • En el lado de JavaScript, escribo una función que toma un objeto JSON como parámetro y lo descomprime.

Al desembalar el objeto, puede imprimir el contenido de la matriz en una etiqueta <DIV>, o donde quiera que le gustaría en la página (jQuery hace un trabajo bastante dulce de esto).

+2

¿Cómo desembalar el objeto JSON con javascript? ¿Puede agregar algún código de muestra para eso y una muestra del objeto desempaquetado a su respuesta, por favor? Gracias –

+0

Mira esto: http://ditio.net/2008/07/17/php-json-and-javascript-usage/ – Stuart

+0

MooTools también codifica/decodifica JSON: http://mootools.net/docs/core/Utilities/JSON – samvermette

1

Para dar seguimiento a su pregunta (y mi respuesta, me quedé sin espacio en la respuesta comentario), aquí es un subconjunto muy simplificada del código que utilizo:

manejador Javascript AJAX de jQuery:

$.ajax({ 
    type: "POST", 
    url: "BACKEND.php", 
    timeout: 8000, 
    data: "var1=" + myVar, 
    dataType: "json", 
    error: function(){ 
    $("#DIVID").html("<div class='error'>Error!</div>"); 
    }, 
    success: function(jsonObj){ 
    $("#DIVID").html(jsonObj.mydata); 
    } 
}); 


PHP Array: 
$data['mydata'] = $myData; 
+0

Última pregunta. Lo probé y ahora obtengo un 'objeto' en javascript que contiene cada una de mis filas, así que creo que accedería a él como myObj [0] .title o myObj [1] .title. El problema es, si quiero obtener el título de algo por su ID, ¿cómo puedo encontrarlo? El ello estaría en myObj [1] .id o myObj [0] .id –

+1

trate de añadir un período de Obj.1.id Más información sobre la notación JSON http://www.hunlock.com/blogs/Mastering_JSON_ (_JavaScript_Object_Notation_) ver: var myObject = {'color': 'azul', 'animal': {'perro': 'amigable'} }; document.writeln (myObject.animal.dog); // salidas amigables – barfoon

+0

Argh, mis disculpas por el terrible formateo que hay. – barfoon

10

Si estás haciendo de datos en línea, siempre he sido aficionado a hacer

<script type="text/javascript"> 
window.sitescriptdata = {}; 
window.sitescriptdata.foo = (<?php echo json_encode($structure); ?>); 
</script> 

Por lo básico, le ahorra hacer una devolución de llamada AJAX. Además, si quieres pegar datos en un nodo DOM, el modo "metaobjeto" es algo que realmente amo.

<div id="foobar"> 
<div><object class="metaobject"> 
     <param name="data" value="<?php echo htmlentities(json_encode($data), ENT_QUOTES);?>" /> 
</object></div> 
</div> 

Ahora bien, esto no puede parecer grande, pero es una manera eficaz de asociar los datos directamente con un nodo DOM sin necesidad de conocer el camino único exacta a ese nodo. Muy útil si tiene muchos conjuntos de datos que deben adjuntarse a elementos de pantalla específicos.

normalmente utilizo http://noteslog.com/metaobjects/ plug-in para jQuery, pero es tan sencilla que he escrito en alguna ocasión yo mismo (hubo un tiempo en que no pude encontrar el plugin, pero el nuevo cómo funcionaba)

Cuando hecho, hay será

$ ("div # foobar> div"). get(). datos. ($) yourarrayhere

visibles a su código.

0

todavía soy bastante nuevo, también digo que quizás este método no sea el más seguro, pero siempre puedes convertir tu matriz de JavaScript en una cadena y luego pasarla a través de la URL para que el php GET.

manera:

for(var i=0;i < jsarray.length;i++) 
{ 
var x = jsarray[i]; 
urlstring += "myvalue[]="+x+"&"; 
} 

document.location.href = "mypage.php?"+urlstring; 

y luego el php sería:

$phparray = $_GET['myvalue']; 

esperanza de que ayuda a

1

En un ejemplo AJAX como here puede resolver este problema de la siguiente manera:

.php archivo (función de retorno ajax)

$myArray = array("object_id"=>1, "object_title"=>"Testobject"); 
return json_encode($myArray); 
archivo

Js (función javascript)

... 
if(g_httpRequest.readyState == 4) 
{ 
var jsonRes = JSON.parse(g_httpRequest.responseText); 
alert(jsonRes.object_title) 
} 
... 
Cuestiones relacionadas