2016-03-22 9 views
0

Ich habe meine ASP einreichen bekam Tastekorrekte Art und Weise einen Ajax-Synchron POST ausführen und dann einreichen Form

<asp:button runat="server" Text="Submit" id="btnSubmitOrder" OnClientClick="return SubmitOrder()" /> 

Meine Javascript-Funktion, SubmitOrder(), braucht eine POST, auszuführen und dann basierend auf dem Erfolg entweder des POST, lassen sie das Formular Vorlage (return true) oder abbrechen (return false)

function SubmitOrder() { 

    $.ajax({ 
     async: false, 
     type: 'POST', 
     url: strURL, 
     data: arrKeyVal, 
     contentType: 'application/json', 
     success: function (data) { 
      if (data.results.count > 0) { 
       return true; 
      } else { 
       return false; 
      } 
     }, 
     error: function (jqXHR, exception) { 
      return false; 
     } 
    }); 

} 

Meine Sorge ist, dass, da diese jetzt veraltet ist, es bald veraltet sein können.

Synchron XMLHttpRequest auf dem Hauptthread ist veraltet, weil seine schädlichen Auswirkungen auf die Erfahrung des Endbenutzers. Für weitere Hilfe, überprüfen Sie https://xhr.spec.whatwg.org/.

Also wie soll ich damit umgehen? Ich weiß, dass ich auf eine Antwort warten muss, bevor ich die Übermittlung des Formulars erlauben darf.

+0

Warum brauchen Sie 'async: false'? – Rayon

+0

@RayonDabre Ich glaube nicht, dass ich die Formularübermittlung von einer asynchronen Rückruffunktion abbrechen kann. – adam

+0

Haben Sie sich 'event.preventDefault();' nicht angesehen? – Rayon

Antwort

1

Sie können ein Ereignis nur synchron abbrechen. Eine Möglichkeit besteht darin, kein Formular-Submit-Ereignis an SubmitOrder anzufügen, sondern nur einen Klick-Handler zu erstellen und dann das Formular in Ihrem Ajax-Callback zu senden.

function SubmitOrder() { 

    $.ajax({ 
     async: false, 
     type: 'POST', 
     url: strURL, 
     data: arrKeyVal, 
     contentType: 'application/json', 
     success: function (data) { 
      if (data.results.count > 0) { 
       $('form').submit(); 
      } 
     } 
    }); 
} 

... oder Sie können eine Ajax-Übermittlung des Formulars anstelle eines normalen HTML-Formulars durchführen.

+0

Ich mag diese Idee sehr, werde es versuchen und berichten. Danke! – adam

+0

Arbeitete wie ein Charme! danke nochmal- – adam

0

BEARBEITEN: Diese Funktion verweist noch nicht auf das Formular, also müssen Sie das Formular auswählen und dann submit aufrufen.

+0

Würde 'this.submit()' 'SubmitOrder' nicht noch einmal aufrufen? – Jacob

+0

Wo deklarieren Sie die Variable 'event'? – Barmar

+0

nein. 'SubmitOrder()' wird nur beim Klick aufgerufen –

Verwandte Themen