Javascript 检测AJAX Post的成功或失败

Javascript 检测AJAX Post的成功或失败,javascript,jquery,ajax,asp.net-mvc,Javascript,Jquery,Ajax,Asp.net Mvc,我有一个标记,我想在浏览器传输到目标链接之前使用jQuery处理程序执行Ajax post。此外,如果我的Ajax帖子失败,我想取消传输 这似乎是一项简单的任务。如果post成功,我将从处理程序返回true。否则,我返回false 问题是$.post()不返回值。相反,我需要提供一个回调函数,该函数在post完成并接收post结果后调用。然而,现在知道我的原始处理程序应该返回什么值已经太晚了 $('#navagateAway').on('click', function (e) { e.

我有一个
标记,我想在浏览器传输到目标链接之前使用jQuery处理程序执行Ajax post。此外,如果我的Ajax帖子失败,我想取消传输

这似乎是一项简单的任务。如果post成功,我将从处理程序返回true。否则,我返回false

问题是
$.post()
不返回值。相反,我需要提供一个回调函数,该函数在post完成并接收post结果后调用。然而,现在知道我的原始处理程序应该返回什么值已经太晚了

$('#navagateAway').on('click', function (e) {
    e.preventDefault();
    var id = $('#event-id').val();
    $.post('@Url.Action("UpdateBeforeNavagating")', { id: myId }, afterUpdate);
}
如果在调用回调函数之前,结果是未知的,那么我的处理程序如何确定它应该返回true还是false?

使用
.fail()
.done()
如下所示:

$('#navagateAway').on('click', function (e) {
    var id = $('#event-id').val();

    $.post('@Url.Action("UpdateBeforeNavagating")', { id: myId }, afterUpdate)
    .done(function(){
        alert('Success');
    })
    .fail(function(){
        e.preventDefault();
    });
}
像这样使用
.fail()
.done()

$('#navagateAway').on('click', function (e) {
    var id = $('#event-id').val();

    $.post('@Url.Action("UpdateBeforeNavagating")', { id: myId }, afterUpdate)
    .done(function(){
        alert('Success');
    })
    .fail(function(){
        e.preventDefault();
    });
}

是一个速记Ajax函数,相当于

因此,将代码移动到使用

是一个速记Ajax函数,相当于

因此,将代码移动到使用


您所能做的最好的事情是阻止默认操作,然后在ajax成功时模拟它

$('#navagateAway').on('click', function (e) {
    e.preventDefault();
    var id = $('#event-id').val();
    var href = this.href;
    $.post('@Url.Action("UpdateBeforeNavagating")', { id: myId }, function(){window.location = href});
}

您所能做的最好的事情是阻止默认操作,然后在ajax成功时模拟它

$('#navagateAway').on('click', function (e) {
    e.preventDefault();
    var id = $('#event-id').val();
    var href = this.href;
    $.post('@Url.Action("UpdateBeforeNavagating")', { id: myId }, function(){window.location = href});
}
@Url.Action(“UpdateBeforeNavagating”)
是页面的提交Url。我猜它在你的网站上,所以它在表格接收处进行特殊处理

请求页面(打印数据)的返回值可以在
$.ajax()
中使用success:function进行操作

$.ajax({
  type: "POST",
  url: '@Url.Action("UpdateBeforeNavagating")',
  data: { id: myId },
  success: function(msg){ if (msg == 'somevalue') /* do somthing */ else /*do something else */}
});
“failure”字段表示该页返回了错误,而不是HTTP 200 code

@Url.Action(“UpdateBeforeNavagating”)
是页面的提交Url。我猜它在你的网站上,所以它在表格接收处进行特殊处理

请求页面(打印数据)的返回值可以在
$.ajax()
中使用success:function进行操作

$.ajax({
  type: "POST",
  url: '@Url.Action("UpdateBeforeNavagating")',
  data: { id: myId },
  success: function(msg){ if (msg == 'somevalue') /* do somthing */ else /*do something else */}
});
“failure”字段表示该页返回了错误,而不是HTTP

200代码

一个完整的代码将帮助您lot@ARMBouhali:我和其他人一样可以访问参考资料。如果你真的在那里找到了可以解决我具体问题的东西,我相信你会让我们知道的lot@ARMBouhali:我和其他人一样可以访问参考资料。如果你真的在那里找到了可以解决我具体问题的东西,我相信你会让我们知道的。谢谢,但这并不能解决问题。我的处理程序需要能够允许或取消原始的单击。我已经更新了答案,将
e.preventDefault()
放在
fail
函数上以取消单击。我认为这不会起作用,因为在触发.fail回调之前,事件处理程序将继续到代码块的末尾。到那时,将不会有一个原始的事件来阻止。谢谢,但这并没有解决问题。我的处理程序需要能够允许或取消原始的单击。我已经更新了答案,将
e.preventDefault()
放在
fail
函数上以取消单击。我认为这不会起作用,因为在触发.fail回调之前,事件处理程序将继续到代码块的末尾。到那时,就不会有原始事件需要阻止了。但这如何允许我控制原始处理程序的返回值呢?如果链接失败,我想取消对它的点击。我不知道如何从你的代码中做到这一点。顺便说一句,速记
$。post()
也支持成功和失败回调。所以我真的看不出这增加了什么。我不明白,你想让
$.post
阻塞而不是异步?然后设置
async:false
您使用的页面指定返回消息。它可以是文本“OK”或包含特定元素的页面。就像您通过浏览器访问它一样,但这如何允许我控制来自原始处理程序的返回值?如果链接失败,我想取消对它的点击。我不知道如何从你的代码中做到这一点。顺便说一句,速记
$。post()
也支持成功和失败回调。所以我真的看不出这增加了什么。我不明白,你想让
$.post
阻塞而不是异步?然后设置
async:false
您使用的页面指定返回消息。它可以是文本“OK”或包含特定元素的页面。就像通过浏览器访问一样,这似乎是正确的。我曾希望我可以在不复制内置功能的情况下完成此操作(我的实际程序更复杂)。因为事件处理程序将在触发ajax调用后完成(而不是等待响应),这确实是我知道的唯一方法。这似乎是对的。我曾希望在不复制内置功能的情况下完成此操作(我的实际程序更复杂)。因为事件处理程序将在触发ajax调用后完成(而不是等待响应),这确实是我知道的唯一方法。感谢您的帮助,但我认为您不理解这个问题。穆萨的回答似乎最贴切。谢谢你的帮助,但我认为你不理解这个问题。穆萨的回答似乎最为贴切。