2013-12-23 52 views
0

我使用Ajax調用從數據庫動態獲取記錄。但是,我想限制只添加新行。例如,如果我的第一個Ajax調用的行如下。不想在表中使用jQuery添加重複行

<tr><td>123</td><td>581</td><td>2013-05-05</td></tr> <br/> 
<tr><td>198</td>td>55</td><td>2013-05-05</td></tr> 

對於第二個Ajax調用,我得到的行如下。

<tr><td>123</td><td>581</td><td>2013-05-05</td></tr> <br/> 
<tr><td>4465</td><td>3481</td>td>2013-06-05</td></tr> 

現在,我想檢查第一個td值的表。如果新行已經有表中的行,我不想追加它們。只應添加不同的行。在上面的例子中,我不想添加具有123值的td,因爲它已經存在。我很困惑如何去做。

$.ajax({ // Making an Ajax call. 
      url:"/Project/getAllMessages.do", // Call URL. 
      dataType:"json", // Expecting the data type as Json.     
      data:{ // Pass commodityId,apmcId,mainLabelId & UserDB to the ervice. 

       mainLabelId:mainLabelId, 
       inputDate:inputDate 
      }, 
      "async":false, 
      type:"POST",    
      success:function(allMessagesJson){ // Get Json data in Success Call back function. 

       $('#divAllInbox').css('display','none'); 
       var allMessages = allMessagesJson[0]; 
       for(index in allMessages){ 

        counter ++; 
        arrMsgs[counter] = allMessages[index]; // Take the complete message into Array.  
        mysqlContentId = allMessages[index].mysqlContentId; //mysqlContentId.     



        var imgMainLabel = mainLabelName.replace(/\s/g, ""); // Remove spaces from the string. 



        $("#tblMainLabelsInbox tbody").loadTemplate($("#messageTemplate"), // Load All tr's as Template. 
          { 
           comm_main_labelid:allMessages[index].mainLabelId, 
           comm_mysql_id:mysqlContentId, 
           comm_hidden_date:allMessages[index].date 
          }, 
          { 
           append:true 
          } 
        ); // Appended to Table.       

       } // End For. 



      }, 
      error:function(xhRequest, ErrorText, thrownError){ // Error Call back function. 
       if(xhRequest.status === 401 || xhRequest.status === 403){ 
        alert("Bad Request. Please Try Again."); 
       } else if (xhRequest.status === 504 && !ajaxRequest++) { 
        loadData(commodity,apmc,mainLabelId,userDB); 
       } else if (xhRequest.status === 500) { 
        alert("Server error. Please try later."); 
       } 
      } 
     }); 
+0

您的行的HTML無效。你應該先解決這個問題。關於只獲取新行的問題,您希望以某種方式在後端對結果進行分頁並僅返回所需的數據。最好將該邏輯放在後端。搜索此網站的Ajax和分頁關鍵字應該爲您提供一些想法。 – jammypeach

+0

@jammypeach,編輯HTML代碼。我只需要在Ajax方面進行驗證。我的要求就是這樣的。 – Syed

+0

你可以將你現有的表格傳遞給你的請求,並在php中使用它創建一個數組(在數組中,一個tr =一個位置),然後選擇你只要看看in_array ....如果不是,添加比通過json回來和建立表新 – Dwza

回答

2

我不想與123的值

加入TD如果你說的是,第一列是足以也許標識行時那麼作爲第一線的success處理程序,你可以得到從表中的值,並把它們放在一個數組:

var rowIds = $("#tblMainLabelsInbox tbody tr td:first-child").map(function() { 
       return $(this).text(); 
      }).get(); 

...,然後用在for循環,當你需要看是否只是通過Ajax檢索到的行已經在表中只檢查它是否在數組中:

if ($.inArray(mysqlContentId, rowIds) === -1) { 
    $("#tblMainLabelsInbox tbody").loadTemplate($("#messageTemplate"), 
         { 
          comm_main_labelid:allMessages[index].mainLabelId, 
          comm_mysql_id:mysqlContentId, 
          comm_hidden_date:allMessages[index].date 
         }, 
         { 
          append:true 
         } 
    ); // Appended to Table. 
    rowIds.push(mysqlContentId); 
} 

我假設在我上面的代碼,你的mysqlContentId變量是一個帶有記錄密鑰ID。如果它實際上是allMessages[index].mainLabelId那麼顯然你會做出適當的替代。

我建議這個數組,因爲在for循環的每次迭代中測試數組中的值應該更有效,而不是測試DOM中的值。而高效地講,而不是通過表上的每個Ajax調用循環(與.map())填充陣列,或許如果你只是初始化一個空數組時,第一次加載頁面:

var rowIds = []; 

...那麼你可以在你的Ajax處理過程中添加id(就像我上面顯示的.push()一樣),然後你永遠不需要遍歷實際的表。

+0

謝謝。我已經以其他方式完成了它。 – Syed

+1

@Nizam,如果它解決了您的問題,請考慮接受此答案,否則請發佈您自己的解決方案並接受該答案。 – jammypeach