2012-05-24 112 views
1

設置:異步Ajax調用工作不正常

我做一個Ajax調用JSONP,這是工作的罰款。這個回調函數改變了變量的值「myVaraible」。在調用之後,還有一些if-else邏輯對「myVaraible」的值起作用。

下面是代碼:

<script> 
     function myfunction() { 
      $.ajax({ 
       url: myURL, 
       dataType: "jsonp", 
       jsonp : "jsonp", 
       async: false, 
       jsonpCallback: "jsonpCallbackFn" 
      }); 
     } 

     function jsonpCallbackFn(mydata) { 
      alert("inside jsonpCallbackFn"); 
      if(something) { 
       // change value of a variable "myVariable"; 
      } 
     } 

     $(document).ready(function() { 
      $("#preview_button").mouseover(function() { 
       myfunction(); 

       alert("after myfunction"); 
       // do some if-else logic based upon the value of myVariable which is updated by the call to myfunction() 
      }); 
     }); 
    </script> 

問題:

AJAX調用保持 '未決',則控制移動到的if-else塊(對舊有效地執行/陳舊myVariable的價值)。然後ajax調用完成。總之,從2個alert箱,alert("after myfunction");先執行然後alert("inside jsonpCallbackFn");

正如你所看到的,我已經設置async: false,,但看起來像預期不工作。誰能告訴我我做錯了什麼?另外,我不確定是否已正確解釋了整個方案,請讓我知道是否需要更多信息。

非常感謝。

+0

RTFM - http://api.jquery.com/jQuery.ajax/ – iambriansreed

回答

3

$.ajax文檔:

跨域請求和數據類型:「JSONP」請求不支持同步操作

所以,你需要把任何依賴回調中的請求結果。

0

我認爲沒有任何理由,你不能這樣做

function myfunction() { 
     return $.ajax({ 
      url: myURL, 
      dataType: "jsonp", 
      jsonp : "jsonp", 
      jsonpCallback: "jsonpCallbackFn" 
     }); 
    } 

然後

... 
$("#preview_button").mouseover(function() { 
    myfunction().done(function(){ 
     alert("after myfunction"); 
    }); 
}); 

jQuery的似乎做了一堆的幕後魔術正常化JSONP請求,如jQuery Ajax請求有所行動,所以我認爲這很好。否則讓我知道。