我有一个<a>
标记,我希望在浏览器转移到目标链接之前使用jQuery处理程序执行Ajax帖子。另外,如果我的Ajax帖子失败,我想取消转移。
这似乎是一项简单的任务。如果帖子成功,我从我的处理程序返回true。否则,我返回false。
问题是$.post()
没有返回值。相反,我需要提供一个回调函数,在帖子完成后调用并接收帖子的结果。但是,到目前为止,知道我的原始处理程序应该返回什么值为时已晚。
$('#navagateAway').on('click', function (e) {
e.preventDefault();
var id = $('#event-id').val();
$.post('@Url.Action("UpdateBeforeNavagating")', { id: myId }, afterUpdate);
}
在我的回调被调用之前,我的处理程序如何判断结果是否应该返回true或false?
答案 0 :(得分:2)
jQuery.post( url [, data ] [, success(data, textStatus, jqXHR) ] [, dataType ] )
是一种简写的Ajax函数,相当于
$.ajax({
type: "POST",
url: url,
data: data,
success: success,
dataType: dataType
});
所以请将您的代码移至$.ajax
$.ajax({
type: "POST",
url: '@Url.Action("UpdateBeforeNavagating")',
data: { id: myId },
success: afterUpdate,
error: function_on_fail // your fn
});
答案 1 :(得分:2)
您可以做的最好的事情是阻止默认操作,然后在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});
}
答案 2 :(得分:1)
像这样使用.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();
});
}
答案 3 :(得分:0)
@Url.Action("UpdateBeforeNavagating")
是您网页的提交网址。我想它会在您的网站上进行,以便在表格接收时进行特殊处理。
请求页面(打印数据)的返回值可以在$.ajax()
中成功操作:功能
$.ajax({
type: "POST",
url: '@Url.Action("UpdateBeforeNavagating")',
data: { id: myId },
success: function(msg){ if (msg == 'somevalue') /* do somthing */ else /*do something else */}
});
&#39;失效&#39; field表示页面返回错误,HTTP以外的任何内容 200码