等到jquery ajax请求完成并返回值
Posted
技术标签:
【中文标题】等到jquery ajax请求完成并返回值【英文标题】:Wait until jquery ajax request is done and return value 【发布时间】:2013-02-21 07:26:30 【问题描述】:我想等到 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”
请帮帮我。
【问题讨论】:
下次考虑使用 jquery 标签而不是 javascript,它会使其更具体并节省人们的时间。谢谢 【参考方案1】:你不能这样做。这不是 ajax 的工作方式。您不能依赖在任何给定时间完成的 ajax 请求......或 ever 完成。您需要做的任何工作都基于 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');
);
附:如果您将async
设置为false
,您可以做您想做的事情,但这会在请求运行时锁定浏览器。不要这样做。那么你就只有 jax。
编辑:您不能将crossDomain: true
和async: false
结合使用。跨域必须是异步的。
【讨论】:
你的意思是async
到 false
@ExplosionPills :我正在从另一个函数调用 isFileExists(url)。如何调用 jqXHR
@Sagar 在isFileExists
做return $.ajax(...)
。然后你可以像isFileExists(url).done(function ()
一样使用它
@ExplosionPills isFileExists(url).done(function () //这里我要结果值我怎样才能得到它);
@Sagar 是服务器发送的结果值吗?然后就做.done(function (resultValue)
【参考方案2】:
也许这对你有用:
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;
我测试了一下,但没有跨域。
【讨论】:
是的,它应该被调用,直到 ajax 请求得到解决。尝试将“超时”设置添加到 ajax 调用中,将其设置为 1 分钟(也许),作为逃避的手段。【参考方案3】:试试这个代码。它对我有用。
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)
);
【讨论】:
以上是关于等到jquery ajax请求完成并返回值的主要内容,如果未能解决你的问题,请参考以下文章
jQuery ajax,等到 beforeSend 动画完成
现需要使用 jQuery 代码实现 ajax 请求,详细信息如下