停止回复ajax错误

时间:2013-10-04 17:52:38

标签: return postback

我有一个带有onclick和onclientclick事件的asp按钮。 onclientclick,它调用一个js函数来保存。如果保存有任何错误,我想停止onclick事件。我试过e.preventdefault(),e.​​stopPropogation(),返回false。似乎没什么用。继承我的代码: 按钮:

<asp:Button ID="btnAddNewAddr" runat="server" onclick="btnAddNewAddr_Click" OnClientClick="SaveLocAddress();" class="btn btn-primary" 
            Text="Save Address" UseSubmitBehavior="false" />

js savemethod:

function SaveLocAddress(e) {
    if (validaddr) {
            $.ajax({
                type: "post",
                async: false,
                contentType: "application/json; charset=utf-8",
                dataType: "JSON",
                url: "/Pages/Location/Search.aspx/SaveLocationAddress",
                data: "{ addrDTO: " + JSON.stringify(`addrToSave`) + "}",
                success: function (xhr, ts, error) {
                    AlertAddrSuccess(id);
                },
                error: function () {
                    console.log('error');
                    AlertAddrError();
                    e.stopPropogation();

                },
                complete: function () {
                    if ($('#alertAddressError').text() != "")
                        return false;
                }
            });
        }
}

1 个答案:

答案 0 :(得分:0)

AJAX以异步方式运行 。所以这里发生了两件事:

  1. 事件在你的回调处理程序被调用之前传播(在AJAX调用的响应之前)。
  2. 回调处理程序在调用时不会附加到SaveLocAddress的上下文,因此return语句不会去任何地方。
  3. 这可能需要一点点重新设计。也许两个按钮?一个是asp:Button,但被设计为不可见。另一个是普通button,它具有您希望按钮具有的文本/样式。事件的顺序是:

    1. 用户点击HTML按钮
    2. JavaScript按钮处理程序调用AJAX调用
    3. 根据AJAX响应,它会触发隐藏按钮上的click事件。
    4. 这是一种全面的处理方式,但这是WebForms。它可能是这样的:

      <asp:Button ID="btnAddNewAddr" runat="server" onclick="btnAddNewAddr_Click" class="btn btn-primary invisible" UseSubmitBehavior="false" />
      <input type="button" class="btn btn-primary" value="Save Address" onclick="SaveLocAddress();" />
      

      然后,在您想要调用回发功能的JavaScript代码中,您可以执行以下操作:

      $('#<%= btnAddNewAddr.ClientID %>').trigger('click');
      

      这会触发click上的asp:button事件,就像用户点击它一样。