1

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

4 回答 4

2

来自jQuery API 文档

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
});
于 2013-06-14T01:20:53.573 回答
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});
}
于 2013-06-14T01:21:52.710 回答
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();
    });
}
于 2013-06-14T01:20:19.903 回答
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 */}
});

“失败”字段表示页面返回错误,除了 HTTP 200 代码之外的任何内容

于 2013-06-14T02:02:33.230 回答