1

我有一个这样编码的按钮:

<asp:Button ID="save_all_filt" runat="server" Text="All data for filtered subjects"
                ClientIDMode="Static" OnClientClick="a= saveAllFilt();  return a; "
                OnClick="save_all_filt_Click" />

saveAllFilt 是一个调用普通 JQuery ajax 调用的函数。像这样的东西:

  function saveAllFilt() {
   jQuery.ajax({
    async: false,
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    type: "POST",
    url: contentURL,
    data: dataarray,
    success: function (msg) {
        // Some processing here. ONLY WHEN IT IS DONE, I NEED TO HAVE POSTBACK.
    },
    error: function (data) {

    }
});         // end of ajax call.

}

我想要这样的事情:onClick 应该只在 ajax 调用完成后继续。我怎么能这样做?

4

6 回答 6

9

您可以OnClick从按钮中删除属性并在属性中返回 false,OnClientClick例如:

<asp:Button ID="save_all_filt" runat="server" Text="All data for filtered subjects"
            ClientIDMode="Static" OnClientClick="saveAllFilt(); return false;" />

OnClick并设置一个具有该属性的隐藏按钮,例如:

<asp:Button ID="hdnButton" runat="server" Text="" Visible="False" 
            ClientIDMode="Static" OnClick="save_all_filt_Click" />

并在您ajax呼叫的成功方法中单击该按钮,例如:

success: function (msg) {
    // Some processing here. ONLY WHEN IT IS DONE, I NEED TO HAVE POSTBACK.
    $('#hdnButton').click();
}, 
于 2013-06-04T11:56:38.577 回答
0

这很容易。在成功函数中调用您的回发方法。检查以下代码。

更改您的标记

<asp:Button ID="save_all_filt" runat="server" Text="All data for filtered subjects"
ClientIDMode="Static" OnClientClick="a=saveAllFilt();  return false;"
OnClick="save_all_filt_Click" />

更改您的 java 脚本代码

function saveAllFilt() {
   jQuery.ajax({
    async: false,
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    type: "POST",
    url: contentURL,
    data: dataarray,
    success: function (msg) {
        // Some processing here.Now do the post postback
        <%=Page.ClientScript.GetPostBackEventReference(save_all_filt,"") %>

    },
    error: function (data) {

    }
});   

您的想法对我来说似乎很奇怪。为什么您要在回发之前调用 ajax。

于 2013-06-04T12:00:57.387 回答
0

你离做对不远了。

代替:

<asp:Button ID="save_all_filt" runat="server" Text="All data for filtered subjects" ClientIDMode="Static" OnClientClick="a= saveAllFilt(); return a; " OnClick="save_all_filt_Click" />

尝试:

<asp:Button ID="save_all_filt" runat="server" Text="All data for filtered subjects" ClientIDMode="Static" OnClientClick="return saveAllFilt()" OnClick="save_all_filt_Click" />

不同之处在于,而不是OnClientClick="a= saveAllFilt(); return a;"仅仅做OnClientClick="return saveAllFilt()"

于 2013-06-04T12:01:42.310 回答
0

如果 return true 在 ajax 成功函数中不起作用。在 ajax 成功函数中使用 __postback 函数。

这将仅在 ajax 调用完成后提交回发。

于 2016-08-12T13:24:35.640 回答
-1

在函数调用中,

 OnClientClick="return saveAllFilt()";

在阿贾克斯,

如果 ajax 调用成功则返回 true,其他情况则返回 false。

于 2013-06-04T11:56:49.970 回答
-1

尝试return true在您的.ajax()调用success属性中跟踪您的代码。优先级总是这样:

  • 客户端
  • 服务器端

只有当客户端返回true服务器点击才会启动。

function saveAllFilt() {
  jQuery.ajax({
     async: false,
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    type: "POST",
    url: contentURL,
    data: dataarray,
    success: function (msg) {
       // Some processing here. ONLY WHEN IT IS DONE, I NEED TO HAVE POSTBACK.
       return true;
   },
   error: function (data) {
       return false;
   }
 });
}

此外,删除onclick属性 - HTML 中的非性能属性(在我看来)并使用 jquery 的on().

于 2013-06-04T11:57:33.020 回答