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调用后完成(而不是等待响应),这确实是我知道的唯一方法。感谢您的帮助,但我认为您不理解这个问题。穆萨的回答似乎最贴切。谢谢你的帮助,但我认为你不理解这个问题。穆萨的回答似乎最为贴切。