jquery - 使用 $.ajax POST 实现 $.when

标签 jquery ajax callback

我有一个 AJAX POST 函数。我想获得成功的回调然后执行一个函数。我选择使用 $.when 作为 follows 来实现此目的

var url = '/echo/html/';
var json_text = ' ';
var FireOrderCounter = 0;

$.when(
        $.ajax({
        type: 'POST',
        url: url,
        data: json_text,
        success: function () {
            FireOrderCounter++;
            alert('successfully completed Action ' + FireOrderCounter);

            var millisecondsToWait = 5000;
            setTimeout(function() {
                FireOrderCounter++;
                alert('Done Spinnin ' + FireOrderCounter);
            }, millisecondsToWait);


        },
        dataType: 'html'
    })
).then(openWindow());


function openWindow() {
     FireOrderCounter++;
     alert('opened window' + FireOrderCounter );
}

success 回调在 openWindow() 之后触发。这是否意味着 $.ajax 没有被推迟,而 $.when 只是 assuming success如 API 中所述?

If a single argument is passed to jQuery.when and it is not a Deferred, it will be treated as a resolved

这是一个简化的测试用例。生产代码也同样失败。我必须触发此事件两次才能获取所有数据。存在竞争条件。

我可以插入一个断点来停止处理。当我仍然握住调试器时,函数就会触发。因此,它不等待成功回调。短暂超时(约 10 秒后发生)?我该如何解决这个问题?

最佳答案

我认为这是您的 then 语句:.then(function(){openWindow()});.then(openWindow)。如果你通过 () 传递,它将执行该函数。

关于jquery - 使用 $.ajax POST 实现 $.when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934774/

相关文章:

javascript - 如何在 Fancybox 3.5 中使用粘性 CSS

javascript - tinymce编辑器中部分文本高亮时如何提醒

javascript - 在 FullCalendar jQuery 插件的选定月份 View 中检查 IF NO 事件

php - 如何使用 PHP 和 AJAX 显示 MySQL 数据库

javascript - Firefox 中的滚动错误

javascript - @Url.ACtion() 中不接受变量参数

c - 回调中函数指针的基本原理

javascript - 关于node.js中async.waterfall的问题

jquery ajax 从 ashx 处理程序获取返回值时出现问题

javascript - 无法将表单提交到 PHP 脚本