2011-12-05 148 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

相關問題