繁体   English   中英

jQuery post()返回true或false

[英]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,但我不想这样做,所以我试图找到一种返回truefalse响应的方法。

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM