2013-08-01 20 views
0

我有一個表,其中有名稱,電子郵件和優先級列。

在頁面加載時,我循環遍歷表和每個錶行,我正在檢查優先級字段。如果它是N,那麼我只顯示該列的低位,否則我必須使用ajax發出服務請求並確定優先級是什麼。

儘管它看起來像我正確迭代,正確地提出請求並正確返回優先級,但值不會顯示在列上。jquery循環遍歷表併發出ajax請求

ajax請求返回具有優先級的JSON對象。

我的猜測是這不起作用的原因,是因爲ajax是一個異步調用,當我得到響應時,我沒有指向該行的指針了。不過,我不確定這一點。

關於如何改進我的代碼的任何想法?

<tr.>.each(function) { 
    if($(this).find('#priority').text()=='N') { 
    $(this).find('#priority').text('Low') 
    } else { 
    $.ajax(serviceURL 
    datatype: json, 
    Success: function(data) { 
     if(data.priority=='A'){ 
     $(this).find('#priority').text('active'); 
     } 
    } // if b ,c, etc... 
    } 
} 
+5

這是你的實際代碼?如果是這樣,它會充滿語法錯誤。此外,看起來你很可能有重複的ID,因爲你在ID的元素上使用'find'。 – tymeJV

+0

你的猜測是錯誤的,因爲你使用.each而不是for循環。該問題必須是其他問題,例如代碼中的許多語法錯誤之一。 –

+0

製作一個名爲「優先級」的類,並在製作表時爲每個「​​」優先考慮一個唯一的ID,例如「priority + index」 – abc123

回答

3

首先,讓我們只修復了代碼擺脫一些語法錯誤的,也許縮短了一點......

$("tr").each(function(){ 
    var thisTr = this; 
    if ($(this).find('#priority').text()=='N') { 
    $(this).find('#priority').text('Low'); 
    } 
    else { 
    $.getJSON(serviceURL,function(data){ 

     if(data.priority=='A'){ 
     $(thisTr).find('#priority').text('active'); 
     } 
     // if b ,c, etc... 
    }); 
    } 
} 

而且,我不知道如果這會影響任何內容,但是請注意那裏的變量thisTr。如果$.ajax$.getJSON函數存在任何範圍問題,這將有望解決此問題。

+0

對不起。對錯誤抱歉。表格是動態創建的。因此,我確實在不同行上的列具有相同的id。我想要做的是循環遍歷表,如果優先級不低,則進行ajax調用並找出.column的優先級。在成功部分,我想設置優先級列的值。我想我可以這樣做,因爲在該行只有一個具有該id的列,所以應該$(this).find('#priority')給我那個列?我一直使用$ .ajax來創建ajax請求,並且不熟悉$ .getJSON – Mary

+0

在jQuery網站上查看'$ .getJSON'。它在內部調用'$ .ajax',並且在處理json數據時通常更容易使用。 –

+0

謝謝。我在代碼中改變的唯一的東西是使用$(thisTr).find('#priority).text('active')而不是$(this).find('#priority').text(active')和它正常工作。 Arent $(thisTr)和$(this)都引用同一個表格行。爲什麼一個人工作,而不是另一個? – Mary