Question

Je ne cherche pas vraiment des exemples de code ici, mais des concepts.

Sur une page, trois sections sont actuellement mises à jour via trois appels AJAX distincts vers des scripts PHP, qui renvoient du JSON. Quel serait le moyen le plus simple de condenser ces trois appels en un seul appel plus important et de recevoir les réponses sur le client en JSON? Comment séparer les réponses sur le client afin de pouvoir manipuler les données de réponse en fonction des informations renvoyées?

Était-ce utile?

La solution

J'aime la méthode de Cris, mais je pense pouvoir apporter une petite amélioration. Comme vous avez déjà 3 entités distinctes, pour réduire la nécessité de tout recoder, vous pouvez combiner PHP en un seul fichier via include 'page.php' et renvoyer un objet via JSON avec des propriétés nommées en fonction de ce qu’elles font (disons "noms", "dates" et "fuzzyThings"). Votre code client pour envoyer la requête aurait alors simplement tous les arguments que vos 3 fonctions envoyées seraient envoyés en une requête. Le JSON retourné ressemblerait alors à quelque chose comme ça (placez vos objets / tableaux / quoi que ce soit dans les zones commentées):

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

Une fois que vous avez reçu ceci du côté client, étant donné que chacun d'entre eux peut déjà avoir une fonction (ou un ensemble de fonctions) pour gérer ses données de retour, vous devriez pouvoir les appeler de cette manière:

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

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

En outre, vous pouvez créer une page PHP unifiée (sans rien enregistrer, espérons-le) via:

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

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

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

Remarque: vous devrez peut-être modifier les 3 pages php afin qu'elles vérifient correctement le $ _POST et sans interférer avec les fonctionnalités des autres pages, je préfère la méthode. de if (isset ($ _ POST ['peu importe']))) {...} pour vérifier que tout a été envoyé correctement, ainsi, vous pouvez en inclure autant que vous le souhaitez et s'il y en a Rien à voir avec un fichier php (c'est-à-dire que vous n'utilisez pas cette section sur cette page), il retournera alors une propriété vide et vous ne l'utiliserez tout simplement pas (ce qui en fait un "one-size-fits-all"). type de chose).

J'espère que ça marche pour vous!

Autres conseils

Vous pouvez formater votre JSON comme ceci:

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

Et maintenant, dans votre réponse 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;

Vous pouvez utiliser une boucle for pour parcourir les données. Dans l'exemple ci-dessus, vous devriez maintenant voir comment utiliser PHP pour formater votre JSON avec plusieurs catégories (utilisateur, actualités, etc.) et renvoyer le tout en un seul appel. Si vous souhaitez un exemple plus élaboré, reportez-vous à cet article , ainsi que < un href = "http://www.devarticles.com/c/a/JavaScript/AJAX-with-JSON/1/" rel = "nofollow noreferrer"> this .

Je pense que vous devez créer un format JSON en fonction de ces 3 sections de la page, en les identifiant de manière à ce que, après la réponse, vous puissiez les renseigner dans ces sections.

Personnellement, j’aime bien la méthode json, mais si vous débutez dans la technologie json ou si vous ne vous sentez pas à l’aise pour l’utiliser, il existe un plugin jQuery spécialement conçu à cet effet, appelé plug-in jQuery Taconite

Dans la communauté Rails, il existe une troisième façon, RJS, qui n’est plus très chaude de nos jours et qui se sent un peu obsolète mais qui a toujours ses propres fans. Je suis curieux de savoir si quelqu'un a porté RJS en PHP ou non?

cela fonctionne pour moi code 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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top