jQuery post()返回true或false

时间:2013-02-26 13:37:35

标签: javascript jquery ajax post global-variables

在考虑问这个问题之前,我一直在寻找答案,但我只是被卡住了。

我已经阅读了一些类似于我的文章/问题,但结束了以下这些:

我最终得到了这个:

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响应。

3 个答案:

答案 0 :(得分:3)

$.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,因为如前所述,async函数仍然是单独运行的。你必须以不同的方式思考。在这种情况下,您必须进行设置,以便在完成工作后发生console.log:

del_act(function() { console.log("del_act finished, status OK!"); }

答案 1 :(得分:1)

变量不能像那样转移出ajax调用。

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

答案 2 :(得分:-1)

jqXHR

它的自身是和对象并直接向控制台写入会给出undefined或object作为输出。
似乎从服务器返回的响应无效,因为它触发了失败事件 确保您返回有效的 JSON 数据。

你应该发布一个链接,以便更好地查看问题。