我想等到ajax调用完成并返回值。
function isFileExists(url) {
var res = false;
$.ajax({
type: "GET",
async: false,
url: url,
crossDomain: true,
dataType: "script",
success: function () {
res = true;
},
error: function () {
res = error;
},
complete: function () {
}
});
return res; //It is always return false
}
我想返回值“true / error”
请帮帮我。
答案 0 :(得分:10)
你不能这样做。这不是ajax的工作方式。您不能依赖于在任何给定时间完成的ajax请求...或曾完成。您需要做的任何工作都是基于ajax请求 必须 在ajax回调中完成。
jQuery可以很容易地绑定回调(因为jQuery的ajax方法返回jqXHR
实现了Deferred):
var jqXHR = $.ajax({/* snip */});
/* millions of lines of code */
jqXHR.done(function () {
console.log('true');
}).fail(function () {
console.log('false');
});
P.S。如果将async
设置为false
,则可以执行您想要执行的操作,但在请求运行时会锁定浏览器。不要这样做。那你就是jax。
编辑:您无法合并crossDomain: true
和async: false
。跨域必须是异步的。
答案 1 :(得分:0)
也许这对你有用:
function isFileExists(url, init) {
var res = null;
var _init = init || false;
if (!_init) {
_init = true;
$.ajax({
type: "GET",
url: url,
crossDomain: true,
dataType: "script",
success: function () {
res = true;
},
error: function () {
res = 'error';
},
complete: function () {
}
});
}
if (res==null) {
setTimeout(function(){ isFileExists(url, _init); }, 100);
} else {
return res;
}
}
我对它进行了简要测试,但没有跨域测试。
答案 2 :(得分:0)
试试这个代码。它对我有用。
function getInvoiceID(url, invoiceId) {
return $.ajax({
type: 'POST',
url: url,
data: { invoiceId: invoiceId },
async: false,
});
}
function isInvoiceIdExists(url, invoiceId) {
$.when(getInvoiceID(url, invoiceId)).done(function (data) {
if (!data) {
}
});
}