0

这里的问题是我有一个使用 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;
}
4

1 回答 1

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
});
于 2013-08-16T14:03:23.243 回答