这里的问题是我有一个函数使用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;
}
答案 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
});