JavaScript,使用withCredentials返回异步请求期间分配的值

时间:2013-08-16 13:59:23

标签: javascript jquery ajax firefox

这里的问题是我有一个函数使用ajax请求将值返回给myBookmarks变量。需要在JavaScript的其余部分(未示出)执行之前分配此变量。所以设置async:false就可以了,但是在Firefox中,我得到了:

窗口上下文中的同步模式不再支持使用XMLHttpRequest的withCredentials属性。

我一直在使用setTimeout来寻求解决方案,但是setTimeout中的匿名函数无法将书签的值返回到上层函数。

所以问题是,如何在index()函数中暂停执行并将书签的值返回到上层myBookmarks var而不使用async:false?

var myBookmarks = index();

function index() {
    var bookmarks = false;

    $.ajax({
        xhrFields: {
            withCredentials: true
        },
        crossDomain: true,
        async: false,
        url: BOOKMARKS_URL,
        contentType: 'application/json',
        dataType: 'json',
        success: function(data){
            if (!data.errors) {
                // INDEX SUCCESS
                bookmarks = data;
            } else {
                // INDEX FAILURE
            }
        }
    });

    return bookmarks;
}

1 个答案:

答案 0 :(得分:1)

  

如何在index()函数中暂停执行并将书签的值返回到上层myBookmarks var而不使用async:false

你做不到。一种选择是提供回调,并在异步函数完成时调用它:

function index(successCallback) {

    $.ajax({
        xhrFields: {
            withCredentials: true
        },
        crossDomain: true,
        async: false,
        url: BOOKMARKS_URL,
        contentType: 'application/json',
        dataType: 'json',
        success: function(data){
            if (!data.errors) {
                // INDEX SUCCESS
                successCallback(data)
            } else {
                // INDEX FAILURE
            }
        }
    });
}

然后将其称为

index(function(bookmarks){
  // do something with bookmarks
});