我过去曾经做过一些jQuery,但是我完全陷入了困境。我了解使用同步ajax调用的优缺点,但在这里将是必需的。

远程页面已加载(由firebug控制),但未显示任何返回。

我应该做些什么来使函数正确返回?

function getRemote() {

    var remote;

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

    return remote;

}


评论

您的代码看起来不错。返回的是什么?有js错误吗?

我觉得这很具有讽刺意味-您在问如何同步执行“异步JavaScript和XML”操作。您真正需要执行的是“ SJAX”。

注意:规范已开始弃用同步AJAX请求。

似乎“将需要[synchronous]”语句表明对JavaScript引擎缺乏了解,因此应用程序架构不佳。我想了解是否确实需要同步。

@pmont似乎声明“将需要[synchronous]”表示缺乏对JavaScript引擎的理解,因此架构欠佳。或一个很好的理解:如果要在onbeforeunload上进行AJAX调用,则实际上建议使用同步请求(因为浏览器窗口在请求返回之前会消失)。无论如何,他清楚地说:“我知道使用同步ajax调用的利弊” ...也许只是相信他?

#1 楼

在发出同步请求时,该请求应为

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


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

请注意:不建议将async属性设置为false,并且正在被删除(链接)。如果您使用以下命令,包括Firefox和Chrome在内的许多浏览器已经开始在控制台中打印警告:

Chrome:


主线程上的同步XMLHttpRequest是不推荐使用,因为它对最终用户的体验有不利影响。有关更多帮助,请检查https://xhr.spec.whatwg.org/。


Firefox:


主线程上的同步XMLHttpRequest不推荐使用,因为它会对最终用户的体验产生不利影响。有关更多帮助,请访问http://xhr.spec.whatwg.org/


评论


注意responseText总是返回一个字符串。如果您希望使用JSON,请在$ .ajax中加上JSON.parse。

–rgajrawala
14年7月14日在14:54

注意:不建议使用xhr.spec.whatwg.org/#the-open()方法同步请求...

–teynon
15年6月24日在18:18

@Tom 标记也是如此。我的建议:继续使用这些功能,以免它们消失。

– Stijn de Witt
15年7月24日在11:17

因为这会锁定浏览器,所以有必要在选项中添加一个超时值:5000左右。

–commonpike
2015年8月1日13:00

@usandfriends对于将字符串解析为对象,使用jQuery.parseJSON代替JSON.parse更安全。stackoverflow.com/questions/10362277/…

– AntonE
15年11月12日在8:53

#2 楼

您没有正确使用ajax函数。由于它是同步的,它将像这样返回内联数据:

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


#3 楼

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

尝试一下

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


评论


是的相同的域和所有内容。正确定义了remote_url,并按照上述方式正确执行了AJAX调用(由firebug控制)。只是没有回报!

–工业
2011年7月13日在20:35

#4 楼

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


评论


请提供一些有关为什么这将有助于OP的解释。

–磷虾
2014年11月20日18:53

从服务器端返回json对象是一个好习惯。它给您更多的控制权。但是,您需要在上面的$ .ajax参数中添加dataType:“ json”。

– jjwdesign
15年5月22日在12:24

这是什么意思:“它给您更多控制权”?

– grantwparks
18年1月1日在14:36

不相关,但是您可以:return result.valid; //这已经是布尔值

– dpineda
18年5月9日在16:27