2010-08-06 34 views
1

我使用jQuery UI Tabs來顯示多個表單(每個表單可以包含多個表單)。當我在標籤之間切換時,我試圖使用AJAX調用來執行標籤表單的POST。這是我正在做的jQuery。使用jQuery時的兩個POST

select: function (event, ui) { 
     var tab_index = $('#tabs').tabs('option', 'selected'); 
     var panel_id = $("ul li a:eq(" + tab_index + ")", this).attr("href"); 
     var panel = $(panel_id); // the content of the tab 

     // For each form in the panel, submit it via AJAX and update its HTML accordingly. 
     $(panel).find("form").each(function() { 
      var that = this; 
      $.post($(this).attr("action"), $(this).serialize(), function (data, success) { 
       if (success) { 
        $(that).html(data); 
       } 
      }); 
     }); 
    }, 

這適用於IE,部分適用於Firefox。在Firefox的一些標籤中,當我在幾次之後在標籤之間切換時,兩個快速文章連續發生(我可以在控制檯中看到它)。這導致不正確的數據被髮回到HTML(我從服務器丟失錯誤消息和原始數據)。我可以每次都重現這個問題。有人對這裏發生的事情有任何建議嗎?

更新:他們的問題始終發生在同一個標​​簽上。工作的標籤和失敗的標籤之間沒有明顯的不同(或者沒有相似之處)。對於兩個快速連續發生的POST數據,第一個POST不包含數據(AKA,我不認爲序列化正確發生),第二個POST是正確的形式,但它沒有任何更改我對錶單做了什麼(因爲第一次POST重置表單)。

+0

你說這個奇怪的行爲發生在一些選項卡上。它總是相同的標籤?意思是,它發生在一些標籤上,但它從來沒有發生在其他標籤上。只是想知道是否可能是由於標籤中的內容(或其結構)。另外,當你看到兩個快速文章,它是發佈相同的數據,還是來自不同標籤的數據?也許有東西被緩存。 – 2010-08-06 18:45:49

+0

@D Hoerster - 更新......謝謝。 – JasCav 2010-08-06 18:53:42

回答

0

事實證明,問題很簡單(「最大」的錯誤總是)。

基本上,當我提交各種表單時(通過單個選項卡表單),我必須將張貼的表單重新插入到選項卡中,以便用戶在處理完後可以看到數據發生的任何更新或錯誤POST。所以,我在做,像這樣(最初):

// Post a form when it has been submitted. 
function postForm(form) { 
    $.post($(form).attr("action"), $(form).serialize(), function (data, success) { 
     if (success) { 
      $(form).html(data); 
     } 
    }); 
} 

什麼我不知道(基本上是由於「讀失敗」)就是html的(數據)方法注入而不是取代。因此,我在網站的其他部分「嵌套」表格,導致各種錯誤。

其結果是,當我改變代碼,以便將它注入母體(如下面的代碼),它的工作完美,並且還固定我有其他一些問題:

// Post a form when it has been submitted. 
function postForm(form) { 
    $.post($(form).attr("action"), $(form).serialize(), function (data, success) { 
     if (success) { 
      // Inject the resulting form back into the parent of the page. 
      var parent = $(form).parent(); 
      parent.removeData($(form)); 
      parent.html(data); 
     } 
    }); 
} 

讀文檔...總是一件好事...