javascript - jQuery post() 返回 true 或 false

标签 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 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/

相关文章:

javascript - 基本 jQuery .data() 调用返回未定义

javascript - jQuery 如何用 RGB 制作调色板?

jquery - 从 append 元素获取 jQuery 对象的更简单方法

javascript - ajax - 验证数据库中是否已存在行

javascript - Chrome 中的 Jquery Ajax 请求有什么问题?

javascript - jQuery 和 AJAX - 将值插入 POST 参数

javascript - vue中如何绑定(bind)数组对象?

javascript - SinonJS 假计时器不适用于 QUnit

javascript - 如何滚动加载到 iframe 中的 div

javascript - 使用 jquery 从表中删除动态添加的行