我有一个key_gen.php文件,其中包含一个生成随机密钥的函数。执行时,php文件返回一个密钥(已测试并且可以正常工作)。
在我的javascript文件中,我在按钮上有一个点击事件(有效),如下所示:
$('#kg_btn').click(function(){});
然后,在我的点击事件中,我有一个功能:
var get_key = function(){
for(var i = 0; i < kg_quantity; i++) {
$.ajax ({
url: "../keygen/gen_rkey.php",
type: "GET",
datatype: "json",
success: function(data) {
var j_obj = JSON.parse(data);
//alert("Success!");
prs = j_obj.test;
console.log(prs);
//add_key();
},
error: function(error) {
alert("Error! Can't send the data");
}
}); //ajax call ends
}
}
当我运行此功能一次时(通过将“Kg_quantity”变量设置为1),每次单击我的按钮时,我都会得到正确的行为。结果是每次点击console.log上的不同键。
如果我将“kg_quantity”设置为除1之外的任何其他数字(例如:3,9,10),我会收到console.log消息,但生成的数字是相同的。
我希望通过将ajax对象插入到for循环中,可以多次执行ajax调用。我试图将ajax调用放在原型函数中,但是我得到了相同的结果。
编辑:我尝试添加一个闭包(正如Ross建议的那样),但我得到了完全相同的结果。
感谢。
答案 0 :(得分:3)
AJAX是异步的。您的循环将在第一次AJAX响应之前完成。
我会对其进行重组,因此AJAX调用的成功响应将触发下一次迭代。或者,如果你很懒,你可以设置async:false:
$.ajax ({
url: "../keygen/gen_rkey.php",
type: "GET",
async: false,
....
甚至更好,将压力放在服务器上并减少来回,以便在一个响应中获得所有密钥:
url: "../keygen/gen_rkey.php?qty=" + kg_quantity,
更新:异步设计方法:
function getKeys(max,cur) {
cur = cur || 1;
if (cur == max) {
return;
}
$.ajax({
....
success(function(data) {
// do stuff....
// recursive iteration
getKeys(max,cur + 1);
}
});
}
getKeys(5);