Что / когда возвращает вызов метода jQuery AJAX? - PullRequest
1 голос
/ 01 июля 2011

Немного фона:

Я пытаюсь реализовать SlickGrid с поддержкой AJAX. Не так много документации, поэтому я использовал этот пример в качестве основы .

В этом примере есть следующий код, который обращается к нужному веб-сервису для получения данных:

req = $.jsonp({
                    url: url,
                    callbackParameter: "callback",
                    cache: true, // Digg doesn't accept the autogenerated cachebuster param
                    success: onSuccess,
                    error: function(){
                        onError(fromPage, toPage)
                    }
                    });
                req.fromPage = fromPage;
                req.toPage = toPage;

Я не совсем уверен, что делает jsonp , но из того, что я прочитал, похоже, что он очень похож на метод ajax в jQuery, за исключением того, что он возвращает json и разрешает междоменные запросы. Веб-служба, которую я вызываю, возвращает только XML, поэтому я изменил этот фрагмент кода на:

req = $.ajax({
                url: "/_vti_bin/lists.asmx",
                type: "POST",
                dataType: "xml",
                data: xmlData,
                complete: onSuccess,
                error: function (xhr, ajaxOptions, thrownError) {
                    alert("error: " + xhr.statusText);
                    alert(thrownError);
                },
                contentType: "text/xml; charset=\"utf-8\""
            });
            req.fromPage = fromPage;
        req.toPage = toPage;

Моя проблема в том, что моя страница выдает ошибку req.fromPage = fromPage;, потому что req равно нулю.

Неправильно ли я думать, что я могу просто заменить свой вызов jsonp вызовом метода ajax? Req просто не установлен, потому что мой вызов ajax не завершился к тому времени, когда код выполняется? Как я могу обойти любую из этих проблем?

Если я закомментирую последние две строки и жестко закодирую эти значения в другом месте, все будет хорошо.

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Неправильно ли я думать, что я могу просто заменить свой вызов jsonp вызовом метода ajax?

Нет, это должно работать просто отлично.

Является ли req просто не установленным, потому что мой ajax-вызов не завершился к тому времени, когда код выполняется?

Да, это правильно.

Методы ajax запускают запрос и немедленно возвращаются.Если вы хотите что-то сделать после получения ответа, вы должны сделать это в обработчике события success.

Возможно, вы захотите использовать событие success вместо события complete, так какcomplete событие происходит, даже если есть ошибка.

Вы могли бы указать async: false, в своих настройках, чтобы Ajax-вызов ожидал ответа, но это означает, что браузер зависаетпока он ждет.

0 голосов
/ 01 июля 2011

Как Гуффа указано , $.ajax() работает асинхронно.Таким образом, вы должны указать обратный вызов , который будет вызываться, когда запрос вернул ответ, а не просто использовать то, что возвращает $.ajax().

Существует несколько различных обратных вызововМожно указать следующие методы:

  • complete - запускается при получении ответа независимо от его статуса.
  • success - запускается при получении ответа с успешным состояниемкод (обычно 200).
  • error - запускается при получении ответа с кодом ошибки (например, 404 или 500).

Чтобы что-то сделать с телом ответапосле успешного запроса вы должны сделать что-то вроде

$.ajax({
    ...
    success: function(body) {
        alert('This is the method body:' + body);
    }
});

Прочтите в документации о различных методах, чтобы узнать, какие дополнительные параметры вы можете использовать.

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