Pregunta

Realmente no busco ejemplos de código aquí, solo conceptos.

Tengo tres secciones en una página 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 en función de qué información se devuelve?

¿Fue útil?

Solución

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 en la combinación de PHP en un archivo a través de include 'page.php' y enviar un objeto de vuelta a través de JSON con propiedades nombradas por lo que hace cada uno de ellos (digamos " nombres ", " fechas " y FuzzyThings "). Su código de cliente para enviar la solicitud simplemente tendrá todos los argumentos que sus 3 funciones enviadas individualmente se enviarán en una sola solicitud. El JSON devuelto se vería así (ponga sus objetos / arrays / 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 llegue al lado del cliente, como supongo que cada uno ya tiene una función (o un conjunto de funciones) para tratar sus datos de retorno, debería poder llamarlos 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 puede hacer una página PHP unificada (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 php para que verifiquen el $ _POST correctamente y sin interferir con la funcionalidad de las otras páginas, si aún no lo han hecho, prefiero el método de if (isset ($ _ POST ['whatever'])) {...} para verificar que todo se envió correctamente, de esta manera, puede incluir tantos como desee, y si hay no tiene nada que ver con un archivo php (es decir, no está utilizando esa sección en esa página), luego devolverá una propiedad en blanco y simplemente no la usará (básicamente, se trata de un " talla única para todos " tipo de cosa).

Espero que funcione para ti!

Otros consejos

Puedes formatear tu JSON de esta manera:

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

Y ahora en tu 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;

Puedes usar un bucle for para atravesar 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 detallado, consulte este artículo, así como < a href = "http://www.devarticles.com/c/a/JavaScript/AJAX-with-JSON/1/" rel = "nofollow noreferrer"> this .

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

Personalmente, me gusta el método json, pero si eres nuevo en json o no te sientes cómodo trabajando con él por algún motivo, hay un plugin jQuery diseñado específicamente para este fin llamado jQuery Taconite Plugin

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

esto está funcionando 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top