设定:
我正在做一个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调用完成。简而言之,在alert
个框中,alert("after myfunction");
首先执行,然后执行alert("inside jsonpCallbackFn");
正如您所看到的,我已经设置了async: false,
,但看起来并没有按预期工作。谁能告诉我我做错了什么?另外,我不确定我是否已正确解释了整个场景,如果需要更多信息,请告诉我。
非常感谢。
答案 0 :(得分:3)
答案 1 :(得分: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请求,所以我认为这很好。别的我知道了。