2009-05-04 19 views
7

No busco realmente ejemplos de código aquí, solo conceptos.Respuestas múltiples de una solicitud de AJAX

Tengo tres secciones en una página ahora que se están actualizando a través de tres llamadas AJAX separadas a scripts PHP, que devuelven JSON. ¿Cuál sería la forma más fácil de condensar estas tres llamadas en una llamada más grande y recibir las respuestas en el cliente en JSON? ¿Cómo separaría las respuestas en el cliente para poder manipular los datos de respuesta según la información que se envía?

Respuesta

4

Me gusta el método de Cris, pero creo que puedo proporcionar una pequeña mejora. Como ya tiene 3 entidades separadas, para reducir la necesidad de recodificar todo, podría hacer algo como combinar su PHP en un archivo a través del include 'page.php' y enviar un objeto a través de JSON con propiedades nombradas para cada uno de ellos (diga "nombres", "fechas" y "cosas difusas"). Su código de cliente para enviar la solicitud simplemente tendría todos los argumentos enviados por sus 3 funciones de forma individual en una solicitud. El JSON devuelto sería entonces algo como esto (poner los objetos/arreglos/lo que sea en las áreas comentadas):

{ 
    "names" : {/*stuff needed for names goes in here*/}, 
    "dates" : {/*stuff needed for dates goes in here*/}, 
    "fuzzyThings" : {/*all fuzzy things goes in here*/} 
} 

Una vez que esta al lado del cliente, ya que asumirá cada una que ya tenga una función (o conjunto de funciones) para hacer frente a los datos que de retorno, debe ser capaz de llamar a ellos de esta manera:

function handler(retText) { 
    var returnedObject = eval(retText); 

    doStuffWithNames(returnedObject.names); 
    doStuffWithDates(returnedObject.dates); 
    playWithFuzzyThings(returnedObject.fuzzyThings); 
} 

Además, en el extremo de PHP se puede hacer una página PHP unificado (sin recodificar nada con suerte) a través de:

<?php 
    echo '{'; 
     echo '"names":{'; 
     include 'names.php'; 
     echo '},'; 

     echo '"dates":{'; 
     include 'dates.php'; 
     echo '},'; 

     echo '"fuzzyThings":{'; 
     include 'fuzzyThings.php'; 
     echo '}'; 
    echo '}'; 
?> 

Nota: Es posible que deba editar las 3 páginas de PHP para que verifiquen $ _POST correctamente y sin interferir con la funcionalidad de las otras páginas, si no lo ha hecho aún, prefiero el método de if(isset($_POST['whatever'])) { ... } para verificar que todo fue enviado correctamente, de esta manera, puede incluir tantos como desee, y si no hay nada que ver con un archivo php (es decir, no está usando esa sección en esa página), luego devolverá una propiedad en blanco, y simplemente no la usará (básicamente convirtiéndola en un tipo de cosa "única para todos").

Espero que te sirva!

+0

me gusta su mejoría, no pienso en ello su camino. Bien hecho compañero. –

3

Puede dar formato JSON como esto:

"user" : [ { 
    "name" : "Harry", 
    "hobby" : "Skating" 
}, { 
    "name" : "Dave", 
    "hobby" : "Scuba Diving" 
} ], 
"news" : [ { 
    "date" : "3/13/05", 
    "title" : "Blah", 
    "postedby" : "Mike", 
} ] 

Y ahora en su respuesta AJAX:

var data = eval('('+ xhr.responseText +')'); // Ajax response 
var user = data.user[0].name; // Harry 
var user2 = data.user[1].name; // Dave 
var title = data.news[0].title; 

Usted puede utilizar un bucle para recorrer los datos. En el ejemplo anterior, ahora debería ver cómo puede usar PHP para formatear su JSON con múltiples categorías (usuario, noticias, etc.) y devolver todo con solo una llamada. Si desea un ejemplo más elaborado, consulte el artículo this, así como this.

0

Creo que tienes que hacer un formato JSON de acuerdo con esas 3 secciones en la página, identifícalas para que después de la respuesta puedas poblarlas en esas secciones.

0

personalmente me gusta el método JSON pero si eres nuevo en JSON o no se siente cómodo trabajando con ella por cualquier razón hay un plugin de jQuery diseñado específicamente para este propósito llamado jQuery Taconite Plugin

En la comunidad de Rails hay una tercera manera llamada RJS que no es tan caliente hoy en día y se siente un poco obsoleta, pero todavía tiene sus propios fanáticos.Tengo curiosidad si alguien ha portado RJS a PHP o no?

0

esto se workimg para mí
código php :

//for test 
$categoryName = "category"; 
$idcategory = "1"; 

$json = "{'productcategory':[{'categoryname':'".$categoryName."','idcategory':'".$idcategory."'}]}";   
echo $json; 

javascript:

var str = xmlhttp.responseText.trim(); 
var json = JSON.stringify(eval("(" + str + ")")); 
var obj = JSON.parse(json); 
alert(obj.productcategory[0].idcategory); 
alert(obj.productcategory[0].categoryname); 
Cuestiones relacionadas