jQuery post() return true or false



在想问这里之前,我已经搜索了一段时间的答案,但我还是被卡住了。

我读过一些与我类似的文章/问题,但最后还是读了以下一篇:

  • JQuery-将ajax响应存储到全局变量//答案:https://stackoverflow.com/a/905324
  • jQuery:ajax调用成功后返回数据

我最终得到了这个:

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,一起使用,但我不想这样做,所以我正在尝试找到一种返回truefalse响应的方法。

$.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))

因为这将为您提供undefined,因为如前所述,异步函数仍在单独运行。你必须以不同的方式思考。在这种情况下,您必须进行设置,以便console.log在工作完成后发生:

del_act(function() { console.log("del_act finished, status OK!"); }
变量不能像那样从ajax调用中转移出来。

相反,您应该做的是在成功/失败中调用一个传递true或false值的函数,然后将代码放入该函数中,以对该true/false输出进行操作

jqXHR

它的self-is和object,并将其直接写入控制台将给出未定义或object作为输出。
从服务器返回的响应似乎是无效的,因为它正在触发失败事件
请确保返回的是有效的JSON数据。

你应该发布一个链接,以便更好地了解这个问题。

相关内容

  • 没有找到相关文章

最新更新