我是JavaScript新手。我正在動態創建一個表;我面臨着執行順序的問題。我知道JavaScript代碼不會按順序執行,但是解決方法是什麼?按順序使用javascript ajax調用創建html表?
首先我會簡要介紹一下我正在嘗試做的事情。
1)loadList()
- >我會叫上載數據按鈕,點擊這個方法 在這裏,我將會觸發AJAX請求獲得使用上述AJAX請求的結果數據
2),我想創建表有組合框,其值使用另一個AJAX調用填寫,傳遞rowObject
值
以下行
3)數錶行td
是我的代碼:
var loadList = function(){
//ajax call
$.ajax({
url:"tworows.json",
type: "GET",
dataType : "json"
})
.done(function(data, textStatus, jqXHR){
generateTable(data);
});
};
function generateTable(data){
$("#gridTable").empty();
//create table header
var headertr = $("<tr><th>col1 </th><th>col 2</th><th>col 3</th><th>col 4</th><th>col 5</th><th>col 6</th><th>col 7</th></tr>");
//get table id from jquery
var tableelement = $("#gridTable");
//add header row to table
tableelement.append(headertr);
for(var i=0; i< data.links.id.length; i++){
tableelement.append(createRow(data.links.id[i]));
}
}
function createRow(rowObject){
//used to create combo box 1 based row 1 value
var combo1 = createCombo1(rowObject);
//used to create combo box 2 based row 1 value
var combo2 = createCombo2(rowObject);
var trElement = "<tr>"+
"<td><input type='text' name='col1name' value='"+rowObject.Number+"' onblur='handleInput(this)'/></td>"+
"<td><input type='text' name='col3name' value='"+rowObject.name+"'/></td>"+
"<td><input type='text' name='col3name' value='"+rowObject.quantity+"'/></td>"+
"<td>"+combo1+"</td>"+
"<td>"+combo2+"</td>"+
"<td><button>Del</button></td>" +
"<td><button>Add</button></td></tr>";
return trElement;
}
function createCombo1(rowObject){
var comboList = [];
//call ajax to get combo value
$.ajax({
url:"combo1data.json",
type: "GET",
dataType : "json",
async : false
})
.done(function(data, textStatus, jqXHR){
comboList = data.links.id;
});
var cmb1 = "<select name='cmb1' onchange='handlecmb1Change(this)'>";
for(var i=0;i < comboList.length; i++){
cmb1 +="<option value='"+comboList[i].id+"'>"+comboList[i].name+"</option>";
}
cmb1 += "</select>";
return cmb1;
}
function createCombo2(rowObject){
var comboList = [];
//call ajax to get combo value
$.ajax({
url:"combo2data.json",
type: "GET",
dataType : "json",
async : false
})
.done(function(data, textStatus, jqXHR){
comboList = data.links.id;
});
var cmb2 = "<select onchange='handlecmb2Change(this)'>";
for(var i=0;i < comboList.length; i++){
cmb2 +="<option value='"+comboList[i].id+"'>"+comboList[i].name+" </option>";
}
cmb2 += "</select>";
return cmb2;
}
這裏的行正在創建第一個,之後,控制是去createCombo
方法。正因爲如此,我沒有在td
中獲得組合框。
我想根據AJAX調用的第一個結果創建組合框;使用第一個結果,我需要調用其他2個AJAX調用並將它們填充到td
組合框中。
嘗試ASYN:在Ajax調用 – Illaya
感謝Illaya假的,它的工作,這意味着如果沒有Ajax調用正確的順序一行接着JavaScript的走線? – user3231742
是的。現在工作? – Illaya