【问题标题】:Fire event right after event was sent but before it was completed在事件发送之后但在它完成之前触发事件
【发布时间】:2014-03-19 05:03:41
【问题描述】:

我有以下情况。我需要在我的 ajax 请求发送后但在它完成之前触发一些事件。看着documentation,我看到了一大堆事件:beforeSendcompleteerrorsuccessdonealways。但是没有什么看起来像我想要的事件。

那么有可能吗?

只是为了强调我到底想要实现什么

    var foo = 'BAR';
    $.post('serverURL', {
        T: foo,
    }, function(data){
        //...
    }, 'json');

    foo = '';

所以我有一个类似的代码。而且它的工作方式非常好(它将正确的foo 发送到服务器,而不是在发送它之后立即对其进行修改)。它不会在 ajax 完成/完成/成功/失败时修改它,而是在它触发后立即修改它。

我想将此修改 foo = '' 放入回调中(如成功回调)。只是为了回答我为什么需要这样做:有些人在阅读代码时,决定通过将foo = '' 移动到其他地方(在ajax 之前)来“改进”它,从而引入了难以发现的错误。像 // 不要移动它这样的评论没有帮助。

【问题讨论】:

  • some event 是什么?
  • @Salvador Dali 请参阅“示例:链任务”中的api.jquery.com/deferred.then 希望这会有所帮助
  • @Pilot 任何功能。您可以放入 successdone 的内容。我知道我可以在 ajax 调用之后直接放它,但是还有别的吗?
  • @guest271314 谢谢,但延迟是在 ajax 完成后发生的事情。
  • @Pilot beforeSend 在 ajax 发送之前被调用。

标签: jquery ajax


【解决方案1】:

存在一个全局 jQuery ajax 事件处理程序:

$(document).ajaxStart(function(){   ...    });

,在第一个 Ajax 请求开始时调用。

【讨论】:

  • ajaxStart 将为每个将被调用的 ajax 执行。
  • 您可以将 ajaxStart 绑定到特定元素,如此处所示 (stackoverflow.com/questions/1191485/…),但不清楚这是否是您想要做的。
【解决方案2】:

这个怎么样?

formData = {
    param1: "param1"
}
$.ajax({
    type: 'GET',
    contentType: 'application/json',
    url: "https://example.com/detail.php",
    dataType: "json",
    data: formData,
    beforeSend: function() {
        //before handler
    },
    success: function(data) {
        //success handler
    },
    complete: function(data) {
        //complete handler
    },
    error: function(data) {
        //error handler
    }
});

【讨论】:

  • 不,它们都将在 ajax 完成后执行。一些错误,当它不成功时。
  • 我已经回复了 cmets 中的某个人,说 beforeSend 在 ajax 开始之前触发了一个事件。不是刚开始。
猜你喜欢
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
相关资源
最近更新 更多