一尘不染

异步ajax调用未按预期工作

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调用完成。简而言之,在两个alert方框中,alert("after myfunction");先执行然后执行alert("inside jsonpCallbackFn");

如您所见,我已经设置了async: false,,但是看起来并没有按预期工作。谁能告诉我我在做什么错?另外,我不确定是否已正确解释了整个情况,请让我知道是否需要更多信息。

非常感谢。


阅读 357

收藏
2020-07-26

共1个答案

一尘不染

$ .ajax文档中:

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

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

2020-07-26