Domanda

Non sto davvero cercando esempi di codice qui, solo concetti.

Ora ho tre sezioni su una pagina che vengono aggiornate tramite tre chiamate AJAX separate agli script PHP, che restituiscono JSON. Quale sarebbe il modo più semplice per condensare queste tre chiamate in una chiamata più grande e ricevere le risposte sul client in JSON? Come separerei le risposte sul client in modo da poter manipolare i dati di risposta in base a quali informazioni vengono restituite?

È stato utile?

Soluzione

Mi piace il metodo di Cris, ma penso di poter fornire un piccolo miglioramento. Dato che hai già 3 entità separate, per ridurre la necessità di ricodificare tutto, potresti fare qualcosa sulla falsariga di combinare il tuo PHP in un file tramite include 'page.php' e rispedire indietro un oggetto tramite JSON con proprietà denominate per ciò che fanno ognuna di esse (diciamo "nomi", "date", "e" fuzzyThings "). Il tuo codice cliente per inviare la richiesta avrebbe semplicemente tutti gli argomenti inviati dalle tue 3 funzioni e inviati in un'unica richiesta. Il JSON restituito sarebbe quindi simile a questo (metti i tuoi oggetti / array / qualunque cosa nelle aree commentate):

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

Una volta ottenuto questo dal lato client, dato che presumo che ciascuno possa già avere una funzione (o un insieme di funzioni) per gestire i propri dati di ritorno, dovresti essere in grado di chiamarli in questo modo:

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

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

Inoltre, alla fine di PHP è possibile creare una pagina PHP unificata (senza ricodificare nulla, si spera) tramite:

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

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

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

Nota: potrebbe essere necessario modificare le 3 pagine php in modo che controllino correttamente $ _POST e senza interferire con la funzionalità delle altre pagine se non l'hai già, preferisco il metodo di if (isset ($ _ POST ['qualunque'])) {...} per verificare che tutto sia stato inviato correttamente, in questo modo, puoi includerne quanti ne vuoi, e se c'è niente a che fare con un file php (cioè non stai usando quella sezione su quella pagina), quindi restituirà una proprietà vuota e semplicemente non la userai (fondamentalmente rendendola una "misura unica") tipo di cosa).

Spero che funzioni per te!

Altri suggerimenti

Puoi formattare il tuo JSON in questo modo:

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

E ora nella tua risposta 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;

Puoi usare un ciclo for per attraversare i dati. Nell'esempio sopra ora dovresti vedere come puoi usare PHP per formattare il tuo JSON con più categorie (utente, notizie, ecc.) E restituire tutto con una sola chiamata. Se desideri un esempio più elaborato, consulta questo e < a href = "http://www.devarticles.com/c/a/JavaScript/AJAX-with-JSON/1/" rel = "nofollow noreferrer"> questo .

Penso che tu debba creare un formato JSON in base a quelle 3 sezioni della pagina, identificarle in modo che dopo la risposta puoi popolarle in quelle sezioni.

Personalmente mi piace il metodo json, ma se sei nuovo su json o non ti senti a tuo agio nel lavorarci per qualsiasi motivo, c'è un plugin jQuery progettato appositamente per questo scopo chiamato Plugin jQuery Taconite

Nella community di Rails c'è un terzo modo chiamato RJS che non è molto caldo al giorno d'oggi e sembra un po 'obsoleto ma ha ancora i suoi fan. Sono curioso di sapere se qualcuno ha portato RJS su PHP o no?

questo funziona per me codice 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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top