jQuery:执行同步AJAX请求

时间:2011-07-13 20:31:49

标签: ajax jquery synchronous

我过去做过一些jQuery,但我完全坚持这个。我知道使用同步ajax调用的优点和缺点,但在这里它将是必需的。

加载远程页面(使用firebug控制),但不显示返回。

如果我的功能正常退回,我应该做些什么?

function getRemote() {

    var remote;

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

    return remote;

}

4 个答案:

答案 0 :(得分:281)

当您进行同步请求时,应该是

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

示例 - http://api.jquery.com/jQuery.ajax/#example-3

请注意:将async属性设置为false 已弃用并且正在被删除(link)。如果您使用此功能,许多浏览器(包括Firefox和Chrome)都已开始在控制台中打印警告:

铬:

  

主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。如需更多帮助,请查看https://xhr.spec.whatwg.org/

火狐:

  

主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。如需更多帮助http://xhr.spec.whatwg.org/

答案 1 :(得分:30)

您正在错误地使用ajax功能。因为它是同步的,所以它会像这样返回内联数据:

var remote = $.ajax({
    type: "GET",
    url: remote_url,
    async: false
}).responseText;

答案 2 :(得分:17)

该网址有多远?它是来自同一个域吗?代码看起来还不错

试试这个

$.ajaxSetup({async:false});
$.get(remote_url, function(data) { remote = data; });
// or
remote = $.get(remote_url).responseText;

答案 3 :(得分:3)

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;
        }
    });
}