2011-08-31 18 views
12

Disculpas si esta explicación no está clara, es difícil de entender para mí también. ¿Cómo puedo usar PHP & Ajax para enviar una matriz a Javascript? Estoy usando Ajax para obtener una matriz de fotos, que luego estoy buscando agregar a un <div> vacío en mi página.¿Cómo pasar una matriz usando PHP y Ajax a Javascript?

El jQuery se ve de la siguiente manera:

$.ajax({ 
    url: "<?php echo site_url('demo/getPhotos/'); ?>", 
    type: 'POST', 
    data: form_data, 
    success: function(data) { 
     alert(data); 
    } 

Y los getPhotos función de PHP se ve así:

<?php 

$photos = array(); 

foreach ($data as $photo) { 
    array_push($photos,$photo['source']); 
    } 

// echo json_encode($photos); How should I be returning $photos? 

Si simplemente echo $photos; los datos se envían a la devolución de llamada de éxito, pero que doesn' parece estar en un formato utilizable.

Si hago un var_dump($photos) en PHP, el resultado es algo así como:

array(4) { 
    [0]=> 
    string(14) "some_image.jpg" 
    [1]=> 
    string(14) "some_image.jpg" 
    [2]=> 
    string(14) "some_image.jpg" 
    [3]=> 
    string(14) "some_image.jpg" 
} 

que he probado varias combinaciones de json_encode y similares, pero realmente estoy adivinando y no está seguro de la teoría detrás de él. ¿Cuál es la mejor manera de pasar datos de PHP a Javascript en este contexto?

Respuesta

19

Probar:

$.ajax({ 
    url: "<?php echo site_url('demo/getPhotos/'); ?>", 
    type: 'POST', 
    data: form_data, 
    dataType:"json", 
    success: function(data) { 
     alert(data[0]); 
    } 

En el lado de PHP, que va a querer imprimir:

print json_encode($photos); 

Otra cosa que se puede tratar con el fin de encapsular mejor su código, y como un ejemplo de una mayor propiedad de JSON, sería:

print json_encode(array("photolist"=>$photos,"photo_owner"=>"Me!")); 

A continuación, en el servidor, es posible acceder a estos con:

data.photolist[0]; //First photo 
data.photo_owner; //The owner of the photo set 
+0

Perfecto, gracias. ¿Te importaría explicar la ventaja de encapsular mejor el código? –

+1

Claro, @Joe. Si solo quieres devolver una lista de fotos, lo que tienes está bien. Pero, si más adelante decide que desea devolver más información sobre cada foto, la matriz asociativa es útil porque permite acceder fácilmente a los datos en JS. Otra forma de hacerlo podría ser hacer que cada foto sea una matriz asociativa y devolver una matriz de matrices asociativas, ala: 'array (array (" name "=>" Photo1 "," file "=>" img1.jpg "), array ("nombre" => "Fin de semana en la playa", "archivo" => "imgs/beachphoto.jpg")) '. – Richard

+0

@Joe: la ventaja de hacer lo anterior es relativa a lo que intenta lograr con su código. Si te encuentras haciendo cosas intrincadas más tarde para recuperar tus datos, recuerda que tuvimos esta conversación, y quizás esto te ayude :-) ¿Eso esclareció las cosas? – Richard

2

json_encode es definitivamente el camino a seguir. jQuery incluso tiene soporte integrado para analizar JSON. Puede usar, p.

$.ajax({ 
    url: "<?php echo site_url('demo/getPhotos/'); ?>", 
    type: 'POST', 
    data: form_data, 
    dataType: 'json', // will automatically convert array to JavaScript 
    success: function(array) { 
     alert(array[0]); // alerts first string 
    } 
}); 
0

retorno del JSON en sí y luego construir la matriz en js haciendo un bucle en el JSON de la siguiente manera:

var array=[]; 
for(var key in json) 
{  
    if(json.hasOwnProperty(key)) 
     array.push(json[key]); 
} 

O puede simplemente trabaje con el json en sí mismo cualquier razón para necesitar el arreglo?

algo así como JSON [0] o JSON [1], etc.

0

json_encode rulez cuando se necesita estas cosas.

¡Recientemente también aprendí esta genial idea! He aquí cómo hacerlo:

function jsonResponse($array) { 
    header('Content-type: application/json; charset=utf-8;'); 
    die(json_encode($array)); 
} 

esto es opcional, si desea hacerlo, usted no tiene que hacerlo, pero en mi sistema de MVC, tiendo a escribir de esta manera ... Así que primero hago una solicitud ajax (prototipo), a un script, que luego llama a esta función jsonResponse que mencioné antes ...

new Ajax.Request('URL', 
{ 
    method:'post', 
    onSuccess: function(transport){ 
     res = transport.responseJSON; 
     $('actionInformation').update(res.username); 
    }, 
    onFailure: function(){ 
     alert('Something went wrong...') 
    } 
}); 

Este es el código JScript, observe la res.msg, aquí es donde podemos operar con matriz. Sin embargo, asegúrese de enviar la respuesta en formato JSON en su PHP, usando la función jsonResponse, es fácil de usar, por ejemplo, su función de PHP puede ser algo como esto:

function ajax_get_user() { 
    $userName = 'Adrian'; 
    $active = 1; 
    jsonResponse(array('username' => $username, 'active' = $active)); 
} 

Más tarde se puede conseguir que sea fácil, res .username, res.active.

Creo que esto debería hacerlo!

8

Hice una matriz $result en PHP y al final de la solicitud.

echo json_encode($result); 

y en JS función $.post handler:

var obj = $.parseJSON(data); 
var v = data.k; 

donde k es valor de clave en matriz asociativa.

+0

No hay matrices asociativas en Javascript, solo objetos. – Marcelo

+0

También es posible que desee comprobar si el valor que está recibiendo en la llamada AJAX no es NULO –

+0

Marelo, me refiero a la clave de matriz asociativa, hecho en el archivo PHP :) – bboydev

Cuestiones relacionadas