我在HTML代码中单击按钮后进行了这个AJAX调用:
HTML:
<div id="singlemethod">
<input type="hidden" id="teachersol" value="">
[...]
<button type="button" id="run" onclick="javascript:play(1, 105, 2)">
<img src="./images/green_play.png" width="40px" height="40px"> </button>
</div>
JAVASCRIPT / AJAX:
function play(mn, id, nofm) {
for (i=1; i<=nofm; i++)
getSolution (i, id, mn);
executemethod (mn, id);
}
function getSolution (mn, id, actmn) {
$.ajax({
type: "GET",
url: "ajax/getteachsol.php",
data: "id="+id+"&number="+mn,
success: function(data){
$('#teachersol').val(data);
}
});
return false;
}
function executemethod (mn, id) {
var teach= document.getElementById('teachersol').value;
alert (teach);
[...]
}
如果我用警告检查值,它什么都不打印,但如果我用Chrome检查元素,我会在值字段中看到我的期望。知道为什么它不会在executemethod中打印任何东西?可能是AJAX的一个问题(我很陌生)?如果您需要任何其他信息,请询问!谢谢!
答案 0 :(得分:2)
function getSolution (mn, id, actmn) {
$.ajax({
type: "GET",
url: "ajax/getteachsol.php",
data: "id="+id+"&number="+mn,
success: function(data){
$('#teachersol').val(data);
executemethod (mn, id);
}
});
return false;
}
请稍微改变你的代码,你可以在ajax函数中调用Executemethod
function play(mn, id, nofm) {
for (i=1; i<=nofm; i++)
getSolution (i, id, mn);
//and remove from here
}
现在检查你得到的结果是否相同?我还没有测试过它
原因是因为您的警报在ajax完成之前正在调用
答案 1 :(得分:1)
AJAX中的A是异步的,这意味着可以在ajax调用完成之前执行executemethod()
。
将executemoethod()
放在例如ajax的成功函数中以确保它在ajax调用完成后执行或更进一步并在jquery中查找promise:http://api.jquery.com/promise/
答案 2 :(得分:0)
建立在dholakiyaankit的答案......
基于此:
<input type="hidden" id="teachersolution" value="">
不应该是:
var teach= document.getElementById('teachersolution').value;
和
$('#teachersolution').val(...)
因为id“teacherol”的元素不存在!
编辑:
也尝试:
success: function(data){
$('#teachersol').val(data);
$('#teachersol').promise().done(function(){
executemethod (mn, id);
});
}
答案 3 :(得分:0)
我在ajax调用中使用complete
解决了这个问题。这是工作代码:
function getSolution (mn, id, actmn) {
$.ajax({
type: "GET",
url: "ajax/getteachsol.php",
data: "id="+id+"&number="+mn,
success: function(data){
$('#teachersol').val(data);
},
complete: function () {
executemethod (mn, id);
}
});
return false;
}