检测AJAX Post的成功或失败

时间:2013-06-14 01:15:41

标签: javascript jquery ajax asp.net-mvc

我有一个<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?

4 个答案:

答案 0 :(得分:2)

来自jQuery API documentation

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码