2012-04-12 67 views
0

我試圖用下面的代碼本身提交表單:

$('#invoices-bundle').submit(function(e) { 
    e.preventDefault(); // don't submit multiple times 
    this.submit(); 
    $.post('php/seller/invoice/invoice_print_batch.php', function(data){ 
     $('#added-invoices').html(data);            
    });// use the native submit method of the form element 
}); 

後提交();我想用我的PHP腳本的內容填充DOM。奇怪的是,DOM沒有在我第一次提交表單時填充,但第二次和之後的每次都是。

不知道爲什麼會發生這種情況!有什麼建議麼?

謝謝!

+1

你的方法對我來說很奇怪。在「本地」提交表單(即非Ajax)之後,您正在對服務器進行Ajax調用並使用該響應!你需要明白,一旦你讓瀏覽器向服務器發送一個非Ajax請求,那麼瀏覽器的本質就是等待它的響應。一旦它得到它,它將用該響應中的任何內容替換當前頁面。所以你當前的頁面和DOM狀態已經消失了。在'this.submit()'之後,你不應該做些什麼。如果遞交響應的時間太長,那麼下面的代碼將得到執行的機會,否則,不會。 – AppleGrew 2012-04-12 12:06:16

回答

2

當您使用this.submit();提交表格後,其餘代碼將無效。頁面將會改變或刷新,並在阿賈克斯代碼將被打破。將表單作爲ajax發佈,而不是定期提交或更改代碼順序,最後輸入submit()

0

如果你想通過AJAX提交,那麼你爲什麼包括'使用本機提交'的評論(這似乎與你的預設默認相沖突)?

看起來好像你會不是需要執行提交操作,當你正在執行的AJAX文章 - 它立即執行;你希望收集POST返回值並將它們提供給你的invoice_print_batch.php頁面嗎?頁面上是否有表單元素需要同時發送?填充這些變量並將它們發送到您的$.post調用的數據參數中。

$('#invoices-bundle').submit(function(e) { 
    e.preventDefault(); // don't submit multiple times 
    var itemToSend = form.find('input[name="inputsName"]').val(); 
    // ...more? 
    $.post('invoice_print_batch.php', { value: itemToSend }, function(data) { 
     $('#added-invoices').html(data); 
    }); 
}); 

這裏,value將在$ _POST爲invoice_print_batch.php。

表單的自然提交已被避免,頁面上的值已發送到您的php頁面,並且該php POST的結果可以在當前頁面上更新。

如果您的真實頁面處理髮生在當前頁面上,您可能希望將處理移動到invoice_print_batch.php - 可能重命名該文件 - 並讓該頁面處理所有表單輸入並返回/打印「回答'。最終結果將是一個頁面,如果沒有任何頁面加載/重定向來處理提交,就會感覺更加快速。

您是否需要完整路徑?爲了便於閱讀,我縮短了它,如果當前頁面位於同一個目錄中,則可以執行此操作(可能不會)。