ASP.NET: як здзяйсняць постбэк толькі пасля таго, як кліент Ajax завершаны

У мяне ёсць кнопка, закадаваная як такія:


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 выклік завершаны. Як я магу гэта зрабіць?

1

6 адказы

Вы можаце выдаліць OnClick атрыбут з кнопкі і вярнуцца ілжывым у OnClientClick атрыбут, як:


і ўсталяваць ўтоеную кнопку з гэтым OnClick атрыбут, як:


і ў метадзе поспеху вашага Ajax патэлефанаваць націсніце на гэтую кнопку, як:

success: function (msg) {
   //Some processing here. ONLY WHEN IT IS DONE, I NEED TO HAVE POSTBACK.
    $('#hdnButton').click();
}, 
7
дададзена

У выкліку функцыі,

 OnClientClick="return saveAllFilt()";

У Ajax,

вяртае ісціну, калі для выкліку Ajax поспех і вярнуцца ілжывым для кожнага іншых выпадках.

1
дададзена

Паспрабуйце вярнуць праўдзівы пасля кода ў .ajax() выклікі-х поспех атрыбуту. Прыярытэт заўсёды так:

  • Кліент -side
  • на боку сервера

Толькі калі кліент вяртае 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 ў на() .

1
дададзена

Вы не далёка ад атрымліваць гэта права.

Замест:

спроба:

The difference is that instead of OnClientClick="a= saveAllFilt(); return a;" just do OnClientClick="return saveAllFilt()"

0
дададзена

гэта даволі лёгка. Выклік вашага метаду зваротнай перадачы ў функцыі поспеху. Chekout наступны код.

змяніць разметку


змяніць код сцэнара 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) {

    }
});   

Ваша ідэя здаецца даволі дзіўным me.Why вы спрабуеце выклікаць Аякс, перш чым постбэк.

0
дададзена

Калі вяртанне праўда не працуе ўнутры функцыі AJAX поспеху. выкарыстоўваць __postback fucntion ўнутры функцыі AJAX поспеху.

гэта будзе здзяйсняць постбэк толькі пасля поўнага Ajax выкліку.

0
дададзена
Калі ласка, вы можаце патлумачыць, як гэта вырашае яго праблему?
дададзена аўтар Gar, крыніца
Проста пошук па функцыі сінтаксісу of__postback Google у JavaScript. Проста патэлефануеце this__postback функцыі ў блоку поспеху функцыі Ajax JQuery.
дададзена аўтар chandan, крыніца