2016-11-28 147 views
0

我已經爲我的應用程序創建的每個表單創建了一個提交函數。它與下面所寫的類似。jQuery - 同步執行2個函數

$('form').submit(function(){ 
    //Some variable declaration 
    $.ajax({ 
    type:'post', 
    url:'someurl', 
    data:formdata 
    success:function(){ 
    console.log('form submitted'); 
    } 
    }); 
}); 

毫無疑問,這工作正常。現在,我希望在收到響應後更新某個元素,與此類似。

$('#customform').submit(); 
console.log('custom form submitted'); 

因此,在這種情況下,我想消息「自定義表單提交的」「表單提交」消息打印到控制檯(同步加載)後才能進行打印。 有人幫忙嗎?

+1

你的標題有誤導之嫌。沒有_synchronous_與你的代碼 – hindmost

+0

有'$ .ajax({async:false})'選項,但這會凍結你的瀏覽器,我建議你不要這樣做,更好的方法是,如果你在第二個Ajax調用第一次的成功回調 – codtex

+0

你有沒有試過這個:http://stackoverflow.com/questions/17809056/how-to-add-additional-fields-to-form-b​​efore-submit –

回答

1

就包括代碼到成功的功能:

success:function(){ 
    console.log('form submitted'); 
    console.log('custom form submitted'); 
} 

您還可以添加完整的功能,因此該代碼將運行,如果不管錯誤或成功:

success:function(){ 
    console.log('form submitted'); 
}, 
complete: function() { 
    console.log('custom form submitted'); 
} 

爲@Tomalak提到在評論中,現代的做法:

var jqxhr = $.post("example.php", function() { 
    alert("success"); 
}) 
.done(function() { 
    alert("second success"); 
}) 
.fail(function() { 
    alert("error"); 
}) 
.always(function() { 
    alert("finished"); 
}); 

可以在這裏閱讀更多:jQuery.post() .done() and success:

+1

現在這樣做的方法是使用' .done()'和'.always()'保證回調。比較:http://stackoverflow.com/questions/22213495/jquery-post-done-and-success – Tomalak

+0

@Tomalak - 同意,但OP添加了成功功能的代碼,其他方法可能會混淆他,如果他遵循指南或任何原因。 –

+0

評論更多的是一個供參考,兩種方式的工作。 – Tomalak

0

後形成成品提交我會脫掉$("form").submit事件偵聽,並添加自定義一個到它的成功函數

$("form").submit(function(){ 
    $.ajax({ 
     type:"post", 
     url:"someurl", 
     data:formdata, 
     success:function(){ 
      console.log("form submitted"); 
      $("form").off("submit"); 

      $("#customform").submit(function(){ 
       $.ajax({ 
        type:"post", 
        url:"someurl", 
        data:modifiedFormdata, 
        success:function(){ 
         console.log("custom form submitted"); 
        } 
       }); 
      }); 
     } 
    }); 
}); 
+1

OP不希望發送兩個Ajax請求。 – Tomalak