2012-05-24 115 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请求有所行动,所以我认为这很好。否则让我知道。