2017-03-28 4 views
0

Ich habe einen Code erstellt, der Ajax-Post aufrufen. Irgendwann ist die Reihenfolge des Prozesses richtig, manchmal nicht. Ich will Ajax Post, die immer die richtige Reihenfolge haben, von Funktion 1 bis Funktion 4. Jede Funktion hat einen anderen Form Wert, also muss ich es wirklich beheben. Kann jemand in meinen Code schauen?Wie kann man Ajax nacheinander mit einem Submit-Button posten?

<script> 

$(document).ready(function() { 
$('#unggah<?php echo $mhs?>').submit(function (event) { 

//FUNCTION 1 

     this.reset(); 
     $('#loading<?php echo $mhs?>').show(); 

     var formData = { 
      'tahun': $('input[name=tahun<?php echo $mhs?>]').val(), 
      'jurusan': $('input[name=jurusan<?php echo $mhs?>]').val(), 
      'posisi': $('input[name=posisi1<?php echo $mhs?>]').val(), 
      'tabel': $('input[name=tabel<?php echo $mhs?>]').val() 
     }; 
     $.ajax({ 
      type: 'POST', 
      url: '<?=base_url()?>operator_pt/unggah/<?php echo $proses.'_'.$CL?>', 
      data: formData, 
      Async:false, 
      dataType: 'json', 
      encode: true 
     })  
     .done(function (data1<?php echo $mhs?>) { 
      console.log(data1<?php echo $mhs?>); 

     }) 

     .fail(function (data1<?php echo $mhs?>) { 
      console.log(data1<?php echo $mhs?>); 

     }); 

     event.preventDefault(); 

//FUNCTION 2 

     var formData2 = { 
      'tahun': $('input[name=tahun<?php echo $mhs?>]').val(), 
      'jurusan': $('input[name=jurusan<?php echo $mhs?>]').val(), 
      'posisi': $('input[name=posisi2<?php echo $mhs?>]').val(), 
      'tabel': $('input[name=tabel<?php echo $mhs?>]').val() 
     }; 
     $.ajax({ 
      type: 'POST', 
      url: '<?=base_url()?>operator_pt/unggah/<?php echo $proses.'_'.$CL?>', 
      data: formData2, 
      Async:false, 
      dataType: 'json', 
      encode: true 
     })  
     .done(function (data2<?php echo $mhs?>) { 
      console.log(data2<?php echo $mhs?>);  
     }) 

     .fail(function (data2<?php echo $mhs?>) { 
      console.log(data2<?php echo $mhs?>); 
     }); 

     event.preventDefault(); 

//FUNCTION 3   

var formData3 = { 
      'tahun': $('input[name=tahun<?php echo $mhs?>]').val(), 
      'jurusan': $('input[name=jurusan<?php echo $mhs?>]').val(), 
      'posisi': $('input[name=posisi3<?php echo $mhs?>]').val(), 
      'tabel': $('input[name=tabel<?php echo $mhs?>]').val() 
     }; 
     $.ajax({ 
      type: 'POST', 
      url: '<?=base_url()?>operator_pt/unggah/<?php echo $proses.'_'.$CL?>', 
      data: formData3, 
      Async:false, 
      dataType: 'json', 
      encode: true 
     })  
     .done(function (data3<?php echo $mhs?>) { 
      console.log(data3<?php echo $mhs?>); 

     }) 

     .fail(function (data3<?php echo $mhs?>) { 
      console.log(data3<?php echo $mhs?>); 
     }); 

     event.preventDefault(); 

// FUNCTION 4 

var formData4 = { 
      'tahun': $('input[name=tahun<?php echo $mhs?>]').val(), 
      'jurusan': $('input[name=jurusan<?php echo $mhs?>]').val(), 
      'posisi': $('input[name=posisi4<?php echo $mhs?>]').val(), 
      'tabel': $('input[name=tabel<?php echo $mhs?>]').val() 
     }; 
     $.ajax({ 
      type: 'POST', 
      url: '<?=base_url()?>operator_pt/unggah/<?php echo $proses.'_'.$CL?>', 
      data: formData4, 
      Async:false, 
      dataType: 'json', 
      encode: true 
     })  
     .done(function (data4<?php echo $mhs?>) { 
      console.log(data4<?php echo $mhs?>); 
     }) 

     .fail(function (data4<?php echo $mhs?>) { 
      console.log(data4<?php echo $mhs?>); 
     }); 
     event.preventDefault(); 
     }); 
}); 

     </script> 
+0

in Ihrer ersten Ajax-Funktion, überprüfen Sie den Status. Wenn es erfolgreich war, passiere noch einmal einen Ajax. – Akintunde007

+0

Verwenden Sie jQuery Callback Funktionen ex. https://www.w3schools.com/jquery/jquery_callback.asp –

+0

Sie können die zweite Ajax-Funktion in der 'done' Klausel Ihrer ersten Ajax-Funktion und usw. ausgeführt, dass die Reihenfolge richtig jedes Mal machen, wie es bis warten die ersten Platzierungen, bis die nächsten Läufe – 131

Antwort

1

Sie separate Funktion für jeden Ajax-Request und rufen Sie von einer anderen Erfolg Funktion man schreiben können.

function callAjax3(){ 
var formData3 = { 
      'tahun': $('input[name=tahun<?php echo $mhs?>]').val(), 
      'jurusan': $('input[name=jurusan<?php echo $mhs?>]').val(), 
      'posisi': $('input[name=posisi3<?php echo $mhs?>]').val(), 
      'tabel': $('input[name=tabel<?php echo $mhs?>]').val() 
     }; 
     $.ajax({ 
      type: 'POST', 
      url: '<?=base_url()?>operator_pt/unggah/<?php echo $proses.'_'.$CL?>', 
      data: formData3, 
      dataType: 'json', 
      encode: true 
     })  
     .done(function (data3<?php echo $mhs?>) { 
      console.log(data3<?php echo $mhs?>); 
      callAjax4() // calling 4th function 

     }) 

     .fail(function (data3<?php echo $mhs?>) { 
      console.log(data3<?php echo $mhs?>); 
     }); 

} 

function callAjax2(){ 
//FUNCTION 2 

     var formData2 = { 
      'tahun': $('input[name=tahun<?php echo $mhs?>]').val(), 
      'jurusan': $('input[name=jurusan<?php echo $mhs?>]').val(), 
      'posisi': $('input[name=posisi2<?php echo $mhs?>]').val(), 
      'tabel': $('input[name=tabel<?php echo $mhs?>]').val() 
     }; 
     $.ajax({ 
      type: 'POST', 
      url: '<?=base_url()?>operator_pt/unggah/<?php echo $proses.'_'.$CL?>', 
      data: formData2, 
      dataType: 'json', 
      encode: true 
     })  
     .done(function (data2<?php echo $mhs?>) { 
      console.log(data2<?php echo $mhs?>);  
       callAjax3(); // calling 3rd function 
     }) 

     .fail(function (data2<?php echo $mhs?>) { 
      console.log(data2<?php echo $mhs?>); 
     }); 

} 
+0

dieses Aussehen einfach, ich werde es versuchen –

+0

ja, es ist einfach und machen Sie auch Ihren Code sauberer. – Sudhakar

+0

mein Browser nur plötzlich hängen, nachdem ich diesen Code ausprobiert, irgendeine Idee, was das ?? Aber der Prozess wird ausgeführt, ich kann es in meiner Datenbank sehen .. –

1

Sie können jeden Ajax-Aufruf in der done() - Funktion des vorherigen verschachteln. Auf diese Weise wird der n + 1-te Anruf nur ausgeführt, wenn der n-te Anruf (erfolgreich) abgeschlossen wurde.

z.B.

$.ajax({data}).done(function() { 
    $.ajax({data}).done(function() {...}) 
}) 
1

Ihre .done( Rückrufe aufgerufen werden, nachdem eine Anforderung erfolgreich abgeschlossen wurde.

Machen Sie Ihre zweite Anfrage im .done( Rückruf der ersten ein, Sie dritte Anfrage - in der .done( Rückruf der zweiten Anfrage usw.

, dass die richtigen Abruf gewährleisten.

... und das ist, was sie nennen Pyramid of doom

1

Wenn ich Ihre Anfrage richtig verstanden habe, dann suchen Sie nach einer Möglichkeit, 2 Formulare mit einem einzigen Senden Button zu senden.

Sie können dies erreichen, indem zweite Formular manuell jquery .submit() -Methode in Erfolg der ersten Form der Ajax-Aufruf verwenden.

Lassen Sie mich wissen, wenn Sie für diese aktualisiertem Code benötigen.

Verwandte Themen