async-ajax调用未按预期工作

时间:2012-05-24 23:45:50

标签: jquery ajax jsonp

设定:

我正在做一个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,,但看起来并没有按预期工作。谁能告诉我我做错了什么?另外,我不确定我是否已正确解释了整个场景,如果需要更多信息,请告诉我。

非常感谢。

2 个答案:

答案 0 :(得分:3)

来自$.ajax文档:

  

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

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

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