async-ajax调用未按预期工作

建立:

我正在做一个ajax-jsonp调用,它工作正常。 这个回调函数改变了变量“myVaraible”的值。 在调用之后,有一些if-else逻辑可以处理“myVaraible”的值。

这是代码:

 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() }); });  

问题:

ajax调用仍然是“挂起”,控件移动到if-else块(有效地执行myVariable的旧/陈旧值)。 然后ajax调用完成。 简而言之,在2个alert框中, alert("after myfunction"); 首先执行然后alert("inside jsonpCallbackFn");

正如您所看到的,我已经设置了async: false, ,但看起来像是没有按预期工作。 谁能告诉我我做错了什么? 另外,我不确定我是否已正确解释了整个场景,如果需要更多信息,请告诉我。

非常感谢。

从$ .ajax文档:

跨域请求和dataType:“jsonp”请求不支持同步操作

因此,您需要在回调中放置任何依赖于请求结果的内容。

我相信没有理由你做不到

  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请求,所以我认为这很好。 别的我知道。