ajax调用后的空输入值

时间:2014-03-10 09:52:13

标签: javascript jquery html ajax

我在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的一个问题(我很陌生)?如果您需要任何其他信息,请询问!谢谢!

4 个答案:

答案 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;

}