[英]How Can I Wait for the Result of an AJAX Request?
我有一个ajax请求,我需要等待响应返回。 我确定我必须使用诺言,但是我真的很害怕诺言,我永远无法理解。 它有一个名为多的东西.then()
.resolved()
.reject()
.catch()
等,这使我感到困惑。
我还是要用它。 所以这是我的代码不起作用:
Promise(function (resolve, reject) {
var req = $.ajax({
url: path,
type: 'GET',
data: {"name": value },
beforeSend: function () {
if (req != null) {
req.abort();
}
},
success: function (url) {
resolve(url);
},
error: function (jqXHR, textStatus, errorThrown) {
reject(textStatus);
},
timeout: 20000
});
});
据我所知,发生了一个Ajax调用,因为当我将console.log(url)
放在success
块中时,它也会打印url,而且一切正常。 但是我不知道该如何退货? 我的意思是resolve()
如何返回某些内容? 而我到底应该何时使用.then()
呢?
应这样使用Promise:
var promise1 = new Promise(function(resolve,reject){
$.ajax({
url : 'yourUrls',
success : function(data){
resolve(data);
},
error : function(err) {
reject(err);
}
})
});
promise1.then(function(response){
//response is what you resolve in promise
}).catch(function(err){
//err is what you send while you reject inside promise
});
顺便说一句, $.ajax
返回实现Promise接口的jqXHR对象,为它们提供Promise的所有属性,方法和行为。 所以你的代码看起来像这样
function onResolve () { alert( "$.ajax succeeded" ); }
function onReject () { alert( "$.ajax failed" ); }
// Promise syntax style
$.ajax({
url: path,
type: 'GET',
data: {"name": "value"}
}).then(onResolve, onReject);
// or equivalent jQuery syntax style
$.ajax({
url: path,
type: 'GET',
data: {"name": "value"},
success: onResolve,
error: onReject
});
您可以像返回新的Promise
:
function ajaxDone() {
return new Promise(function (resolve, reject) {
$.ajax({
url: path,
type: 'GET',
data: {"name": value },
beforeSend: function () {
if (req != null) {
req.abort();
}
},
success: function (url) {
resolve(url);
},
error: function (jqXHR, textStatus, errorThrown) {
resolve(null);
},
timeout: 20000
});
});
}
以及如何使用:
ajaxDone().then(function (resolve) {
if (resolve !== null && resolve !== undefined)
//It is done
else
//not done
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.