2011-12-05 111 views
0

对于我的ajax来说,这有点奇怪。我有一个调用ajax的函数,方法的结构是这样的:当通过回车键触发事件时,调用某个函数,然后在该函数内调用ajax函数并返回一个值。其实它的工作很好,但只在第二个事件被触发,等等......例如,我集中一个文本框,然后按回车键,在第一次输入时没有任何反应,但下次输入时效果很好,等等,然后按回车键。任何人都知道为什么会这样?这里是我的Ajax代码:Ajax在第一次触发时不会触发

function myFunction(val){ 
    var passVal = updateVal(val); 
    alert(passVal); //on first load of page/after refreshing the page, this wont happen on first trigger of event 
} 

function updateVal(val){ 
    $.ajax({ 
      type : 'POST', 
      url : 'updateVal.php', 
      dataType : 'json', 
      data: "val="+val, 
      complete : function(data){ 
       bool = true;         
      }, 
      error : function() { 
       bool = false; 
      } 
    }); 

    return bool; 
} 
+0

如何myFunction的被称为?直接或有任何布尔检查也有任何其他事件,将调用myFunction? – mprabhat

回答

0

更改您的Ajax代码以同步:

$.ajax({ 
      type : 'POST', 
      async: false, 
      url : 'updateVal.php', 
      dataType : 'json', 
      data: "val="+val, 
      complete : function(data){ 
       bool = true;         
      }, 
      error : function() { 
       bool = false; 
      } 
    }); 
0

$阿贾克斯是一个后台呼叫时,它立即返回;你需要像

function updateVal(val){ 
    $.ajax({ 
      type : 'POST', 
      url : 'updateVal.php', 
      dataType : 'json', 
      data: "val="+val, 
      success: function(data) { 
       /* Do something with the DATA once the server replied, it may take a while */ 
       alert(data);         
      }, 
      error : function() { 
       alert(false); 
      } 
    }); 
} 

这是因为它不会阻塞UI线程的同步调用最好的办法

+0

我同意这可能是更好的 - 我只建议同步,因为他的代码结构似乎更基于这些线。据推测,他向我们展示的仅仅是一个简化版本,如果它构造为同步调用,那么他的真实代码可能需要更少的更改。 –

+0

尽可能多的,但我喜欢给最好的解决方案 – PhilippeLM

相关问题