Вопрос

На самом деле я не ищу здесь примеры кода, просто концепции.

Сейчас у меня есть три раздела на странице, которые обновляются с помощью трех отдельных AJAX-вызовов PHP-скриптов, которые возвращают JSON.Какой был бы самый простой способ объединить эти три вызова в один больший вызов и получать ответы обратно на клиенте в JSON?Как бы мне разделить ответы на клиенте, чтобы я мог манипулировать данными ответа на основе того, какая информация отправляется обратно?

Это было полезно?

Решение

Мне нравится метод Криса, но думаю, я могу внести небольшое улучшение.Поскольку у вас уже есть 3 отдельных объекта, чтобы уменьшить необходимость в перекодировании всего, вы могли бы сделать что-то вроде объединения вашего PHP в один файл с помощью include 'page.php' и отправка объекта обратно через JSON со свойствами, названными в соответствии с тем, что делает каждый из них (скажем, "имена", "даты" и "Нечеткие объекты").Тогда ваш клиентский код для отправки запроса просто содержал бы все аргументы, отправленные вашими 3 функциями по отдельности, в одном запросе.Возвращаемый JSON тогда выглядел бы примерно так (поместите ваши объекты / массивы / что угодно в закомментированные области):

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

Как только вы передадите это на сторону клиента, поскольку я предполагаю, что у каждого из них уже может быть функция (или набор функций) для обработки возвращаемых данных, вы сможете вызывать их таким образом:

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

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

Кроме того, в конце PHP вы можете создать единую PHP-страницу (надеюсь, ничего не перекодируя) через:

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

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

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

Примечание: Возможно, вам потребуется отредактировать 3 страницы php, чтобы они проверяли $ _POST правильно и без вмешательства в функциональность других страниц, если вы еще этого не сделали, я предпочитаю метод if(isset($_POST['whatever'])) { ... } чтобы проверить, что все было отправлено правильно, таким образом, вы можете включить столько, сколько захотите, и если нет ничего общего с файлом php (т.е.вы не используете этот раздел на этой странице), тогда он вернет пустое свойство, и вы просто не будете его использовать (по сути, делая его "универсальным для всех").

Надеюсь, у вас это сработает!

Другие советы

Вы можете отформатировать свой JSON следующим образом:

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

А теперь в вашем ответе 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;

Вы можете использовать цикл for для перемещения данных.В приведенном выше примере теперь вы должны увидеть, как вы можете использовать PHP для форматирования вашего JSON с несколькими категориями (пользователь, новости и т.д.) и возвращать все обратно только одним вызовом.Если вам нужен более подробный пример, пожалуйста, обратитесь к это статья , а также это.

Я думаю, вам нужно создать формат JSON в соответствии с этими 3 разделами на странице, идентифицировать их, чтобы после ответа вы могли заполнить их в этих разделах.

Лично мне нравится метод json, но если вы новичок в json или по каким-либо причинам не чувствуете себя комфортно при работе с ним, есть плагин jQuery, разработанный специально для этой цели, который называется Плагин jQuery Taconite

В сообществе Rails есть третий способ под названием RJS, который в наши дни не так уж популярен и кажется немного устаревшим, но все еще имеет своих поклонников.Мне любопытно, портировал ли кто-нибудь RJS на PHP или нет?

для меня это работа
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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top