在考虑在这里提问之前,我一直在寻找答案,但我陷入了困境。
我读过一些与我的类似的文章/问题,但最终以下一篇:
- JQuery - Storing ajax response into global variable//答案:https://stackoverflow.com/a/905324
- jQuery: Return data after ajax call success
我最终得到了这个:
var del_act = (function(){
var resp;
$.post(url+'delete/'+id, 'json')
.done(function(data) {
custom_alert(type.toUpperCase()+' deleted succesfully!');
if(redirect)
window.location.replace(url);
resp = true;
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR);
if(jqXHR['status'] == 404)
custom_alert(type + ' not found');
resp = false;
});
return {getResp: function()
{
console.log(resp);
return resp;
}};
})();
console.log(del_act.getResp());
但问题是 console.log
s 返回 undefined
回复。我知道我可以使用$.ajax()
与 async: false,
但我不想,所以我试图找到一种返回 true
的方法或false
回应。
最佳答案
$.post()
是异步的,意味着请求发送后立即返回,后面的代码依次执行。在这种情况下,您的 console.log
被调用,但您的请求正在异步运行,因此您无法获取其返回值。
处理这种异步场景的方法是使用回调,例如:您指定一个 returnCallback 参数,并在 $.post
调用的“done”回调中调用它。
var del_act = (function(doneCB){
var resp;
$.post(url+'delete/'+id, 'json')
.done(function(data) {
// Call CALLBACK specifying return status
doneCB(true)
})
异步代码的问题在于它迫使您在级联回调中完成所有操作,例如你不能这样做:
console.log(del_act(whatever))
因为这会给你未定义
,因为,正如前面所解释的,异步函数仍然单独运行。你必须以不同的方式思考。在这种情况下,您必须进行设置,以便 console.log 在工作完成后发生:
del_act(function() { console.log("del_act finished, status OK!"); }
关于javascript - jQuery post() 返回 true 或 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15090522/