[英]jQuery post() return true or false
在考虑要问这里之前,我一直在寻找答案,但我只是被卡住了。
我已经阅读了一些与我的文章/问题类似的文章/问题,但以下这些文章/问题结束了:
我最终得到了这一点:
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
返回了undefined
响应。 我知道我可以将$.ajax()
与async: false,
但我不想这样做,所以我试图找到一种返回true
或false
响应的方法。
$.post()
是异步的,这意味着它在发送请求后立即返回,并且按顺序执行之后的代码。 在这种情况下,您的console.log
被调用,但是您的请求正在异步运行,因此您无法获取其返回值。
处理这种异步情况的方法是使用回调,例如。 您指定一个returnCallback参数,然后在$.post
调用的“完成”回调中调用它。
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))
因为那样会使您undefined
,因为如前所述,异步函数仍在单独运行。 你必须换个角度思考。 在这种情况下,您必须进行设置,以便console.log在工作完成后发生:
del_act(function() { console.log("del_act finished, status OK!"); }
这样就不能将变量从ajax调用中移出。
相反,您应该做的是在成功/失败内部调用一个传递true或false值的函数,然后将代码放入该函数中以对该true / false输出进行操作
jqXHR
它是self is和object并将其直接写入控制台将提供未定义或object作为输出。
从服务器返回的响应似乎无效,因为它是触发失败事件。
确保您返回的是有效的JSON数据。
您应该发布链接以更好地了解问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.