2011-04-25 57 views
0

我想用jQuery構建表格行並將其附加到現有表格。在我的行構建函數中,我需要根據$.each循環內的當前值theJSON.EmployeeID創建另一個Ajax調用。jQuery中的連接Ajax回調不執行?

執行內部$.getJSON,檢索有效的JSON並觸發其回調,但包含data.Name的td未連接到trStringtrString甚至沒有收到空的td,看起來這條線根本不會被執行。我是否缺少明顯的東西,還是我誤用了$.getJSON,還是什麼?

//This call succeeds and returns valid JSON 
$.getJSON("ajax/queries.php?q=licenseMain&oId=" + oId + "&sId=" + sId + "&eId=" + eId + "&inUse=" + inUse + "&page=1", function (licensedata) { 
    buildLicenseTable(licensedata); 
}); 

function buildLicenseTable(trArray) { //Build table row-by-row 

    var trString = ""; 

    $.each(JSONforTable, function (key, theJSON) { //Build single table row 
     trString += "<tr>"; 

     trString += "<td>" + theJSON.LicenseID + "</td>"; 
     trString += "<td>" + theJSON.LicenseNumber + "</td>"; 
     trString += "<td>" + theJSON.LicenseType + "</td>"; 

     //The inner $.getJSON call 
     $.getJSON("ajax/queries.php?q=employee&eID=" + theJSON.EmployeeID, function (data) { 
      console.log("*---Callback executing!---*"); 
      trString += "<td>" + data.Name + "</td>"; //<----This line doesn't execute 
     }); 

     trString += "</tr>"; 
     $("#bigtable > tbody:last").append(trString); 
    }); 
} 
+0

如何在腳本中定義JSONforTable? – 2011-04-25 14:25:05

回答

2

請記住,ajax是異步的。一旦你的ajax觸發並返回,你的buildLicenseTable函數已經返回。你有一些選擇:

  1. 同步執行你的ajax。不建議。

  2. 重構您的方法來將所有數據追加到數組,並在最後一次ajax返回後進行構建。這種方法唯一的問題是不能保證這些方法從服務器返回的順序。

  3. 更改您的ajax方法,以一次調用返回此操作的所有數據而不是多次。效率更高。

1

問題是,AJAX是異步的,所以你的代碼將觸發請求並繼續其餘的功能。回調到時,字符串已經被附加到DOM。爲了解決它只是將其更改爲這個

 $.getJSON("ajax/queries.php?q=employee&eID=" + theJSON.EmployeeID, function(data){ 
      console.log("*---Callback executing!---*"); 
      trString += "<td>" + data.Name + "</td>";//<----This line doesn't execute 

     trString += "</tr>";    
     $("#bigtable > tbody:last").append(trString); 
    }); 
0

下面的代碼將用於工作,你

//This call succeeds and returns valid JSON 
$.getJSON("ajax/queries.php?q=licenseMain&oId=" + oId + "&sId=" + sId + "&eId=" + eId + "&inUse=" + inUse + "&page=1", function(licensedata){ 
    buildLicenseTable(licensedata); 
}); 

function buildLicenseTable(trArray){//Build table row-by-row 

    var trString = ""; 

    $.each(JSONforTable, function(key, theJSON){//Build single table row 
     trString += "<tr>"; 

     trString += "<td>" + theJSON.LicenseID + "</td>"; 
     trString += "<td>" + theJSON.LicenseNumber + "</td>"; 
     trString += "<td>" + theJSON.LicenseType + "</td>"; 

     //The inner $.getJSON call 
     $.getJSON("ajax/queries.php?q=employee&eID=" + theJSON.EmployeeID, function(data){ 
       console.log("*---Callback executing!---*"); 
       trString += "<td>" + data.Name + "</td>";//<----This line doesn't execute 

       trString += "</tr>";    
       $("#bigtable > tbody:last").append(trString); 
     }); 
    }); 
} 

正如其他人所指出的那樣,你的煩惱是因爲Ajax是異步,並呼籲getJSON後不立即返回等待迴應。我們只是把代碼添加到回調函數中的表格中

+0

Bah,我忘了Ajax的全部內容是異步的......呃!我你們都救了我很多頭痛,非常感謝! – Zach 2011-04-25 14:38:31