jQuery: выполнение синхронных AJAX-запросов - PullRequest
176 голосов
/ 14 июля 2011

Я делал jQuery в прошлом, но я полностью застрял в этом. Я знаю о плюсах и минусах использования синхронных вызовов ajax, но здесь это потребуется.

Удаленная страница загружена (управляется с помощью firebug), но возврат не отображается.

Что я должен сделать по-другому, чтобы моя функция возвращалась правильно?

function getRemote() {

    var remote;

    $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success : function(data) {
            remote = data;
        }
    });

    return remote;

}

Ответы [ 4 ]

285 голосов
/ 14 июля 2011

Когда вы делаете синхронный запрос, он должен быть

function getRemote() {
    return $.ajax({
        type: "GET",
        url: remote_url,
        async: false
    }).responseText;
}

Пример - http://api.jquery.com/jQuery.ajax/#example-3

ОБРАТИТЕ ВНИМАНИЕ: Установка асинхронного свойства в значение false устарел и находится в процессе удаления ( ссылка ).Многие браузеры, включая Firefox и Chrome, уже начали печатать предупреждение в консоли, если вы используете это:

Chrome:

Синхронный XMLHttpRequest в основном потоке устарел из-за его вредногоэффекты для конечного пользователя.Для получения дополнительной помощи проверьте https://xhr.spec.whatwg.org/.

Firefox:

Синхронный запрос XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для работы конечного пользователя.Для получения дополнительной помощи http://xhr.spec.whatwg.org/

30 голосов
/ 14 июля 2011

Вы используете функцию ajax неправильно.Поскольку он синхронный, он будет возвращать данные в строке так:

var remote = $.ajax({
    type: "GET",
    url: remote_url,
    async: false
}).responseText;
17 голосов
/ 14 июля 2011

насколько удален этот URL?это из того же домена?код выглядит нормально

попробуйте

$.ajaxSetup({async:false});
$.get(remote_url, function(data) { remote = data; });
// or
remote = $.get(remote_url).responseText;
3 голосов
/ 20 ноября 2014
function getRemote() {
    return $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success: function (result) {
            /* if result is a JSon object */
            if (result.valid)
                return true;
            else
                return false;
        }
    });
}
...