我有一对嵌套的AJAX请求行为不正确。 第一个获得albums
的列表,第二个获得每个专辑的执行权,给我一个tracks
的列表。奇怪的AJAX行为与循环
$.ajax({
url:getPHPSite(),
method:"POST",
data:{
query: "SELECT id_album FROM albums;"
},
success: function(response){
var albums=JSON.parse(response);
for(var i=0; i<albums.length;i++){
var albumID=albums[i]['id_album'];
getTracks(function(courses) {
//do something
}
}, albumID);
}
}, ....//error handler and everything else
的getTracks()
函数实际上执行第二AJAX请求,并用一callback
function getTracks(callback, albumID){
$.ajax({
url:getPHPSite(),
method:"POST",
data:{
query: "SELECT idtracks FROM tracksWHERE id_album=" + albumID + ";"
},
success: function(response){
array_tracks=JSON.parse(response);
callback(array_tracks);
}, //...everything else
返回阵列轨道的通过将断点,我发现,第一for loop
被单独执行
albumID=1
albumID=2
albumID=3
...end
,然后才执行getTracks()
。
我想getTracks()
为每个专辑迭代执行。
为什么会发生,我该如何解决?
这是因为JavaScript是同步的。在这里阅读答案:http://stackoverflow.com/questions/2035645/when-is-javascript-synchronous 基本上,你正在创建AJAX调用,但循环之后继续AJAX解析。 – Hoyen
你应该**从不**通过ajax发送一个mysql查询批发!我希望这只是一个演示站点,因为如果您执行查询时没有任何形式的输入环境清洁,您就会招致麻烦! –
是的,这是一个演示,不用担心。感谢您的链接@Hoyen –