JQuery возвращает несколько значений в вызове AJAX - PullRequest
5 голосов
/ 03 апреля 2010

У меня есть функция поста jquery, которая возвращает ответ об успешном завершении после нажатия кнопки div. Тем не менее, я хотел бы вернуть несколько переменных в случае успеха. Нужно ли мне использовать JSON, и если да, можно ли его интегрировать в функцию $ .ajax после успеха?

$.ajax({
   type: "POST",
   data: "action=favorite&username=" + username + "&topic_id=" + topic_id + "&token=" + token,
   url: "favorite.php",
   success: function(response)
   {


   }
  });

EDIT Я ценю помощь всех + 1 для всех!

Ответы [ 5 ]

13 голосов
/ 03 апреля 2010

Было бы очень неплохо использовать только ответы JSON с сервера. Таким образом, ваш серверный бэкэнд будет работать как JSON-RPC-сервер, а внешний интерфейс будет полностью независим от него! Конечно, вы можете использовать JSON с функцией $.ajax. Вот пример:

$.ajax({
    url: 'http://some.url.com/',
    data: 'some=post&data=xyz',
    type: 'POST',
    dataType: 'json',
    success: function(response, statusText) {
        // `response` here is a valid JSON object; jQuery handles the work of parsing the response, etc.
    }
});
5 голосов
/ 03 апреля 2010

У меня есть функция поста jquery, которая возвращает ответ об успешном завершении после нажатия кнопки div. Тем не менее, я хотел бы вернуть несколько переменных в случае успеха.

Вы можете вернуть только одно значение - текстовый блок (в большинстве случаев).

Однако вы можете структурировать этот текст, чтобы вы могли легко извлекать из него разные биты данных.

Должен ли я использовать JSON

Нет, но это самый простой вариант.

, и если да, возможно ли его интегрировать в функцию $ .ajax после успеха?

Ммм. Да. Вы читали руководство по функции jQuery ajax ? В нем явно упоминается использование JSON и получение объекта в качестве аргумента функции успеха.

3 голосов
/ 03 апреля 2010

Скажем, возвращенный JSON-это что-то вроде

{
  firstName: 'Ricardo',
  lastName: 'Jones',
  errors: 0
}

Вы можете использовать метод jQuery getJSON следующим образом:

$.getJSON(
   'favorite.php',
   { 'action': 'favorite', 'username': username, 'topic_id': topic_id, 'token': token },
   function(data) {
     alert(data.firstName);
     alert(data.lastName);
     alert(errors);
   }
)

В возвращаемой функции вы можете получить много переменных, которые вы хотите.

3 голосов
/ 03 апреля 2010

Вы должны будете вернуть JSON (или какой-либо другой формат данных, поддерживаемый функцией jjuery ajax ()) из файла fav.php.
edit : не имеет в качестве json, но для множественных возвращаемых значений анализ проще всего. Например, если вы вернули xml или html, вам придется пройти через узлы, чтобы вернуть значение.

Например, если вы вернулись:
{"user": "Joe", "success" : "pass", "message" : "favorite added" }

в случае успеха вы бы использовали:

function(response){
  var user = response.user;
  var success = response.success; // etc.
}

Важная вещь, которую следует помнить, - указывать dataType в вашем вызове ajax как json. jQuery также поддерживает другие типы данных: xml, html, script, jsonp, text

Я считаю, что по умолчанию используется HTML. И, написав php для возврата xml с правильно отформатированными заголовками в сценарии php, я могу вам сказать, что иногда у вас есть для указания dataType для jQuery для его правильного разбора.

0 голосов
/ 03 апреля 2010

Я никогда не программировал на PHP. В asp.net JSON является режимом обмена данными по умолчанию в асинхронном вызове веб-службы, поэтому мне, как разработчику, не нужно беспокоиться о базовых деталях JSON. Я думаю, что даже jQuery получает свои данные в формате JSON. Если у вас есть несколько значений, вы можете получить их в виде списка или словаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...