当前位置: 首页 > 面试题库 >

异步ajax调用未按预期工作

靳彦
2023-03-14
问题内容

建立:

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

非常感谢。


问题答案:

从$ .ajax文档中:

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

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



 类似资料:
  • 自从我开始使用Flatter以来,我面临着一个与Flatter async await相关的问题。大多数时候,我试图用未来和等待的结果,它跳过等待,并得到最短的方式返回 请帮助我更好地理解flatter async wait,或者告诉我哪里做错了,这样我就可以改进我的代码

  • 在我的flatter应用程序中,我试图在异步函数完成后使用whenComplete()方法运行一些代码。问题是whenComplete()方法中的代码甚至在异步函数完成之前就被执行了。 我也尝试过使用then()方法,这也产生了相同的结果。 这是我在其中调用异步函数的init函数: 这是异步函数的函数体: 运行应用程序时的控制台输出为: 因此,在调用异步函数getUserHomes的init()函

  • 问题内容: 我正在尝试插入带有参数的函数,以将从异步回调接收的数据追加到外部数组。但是,它不起作用。我尽一切所能找出原因-没运气。 正如@AirspeedVelocity所建议的那样,我将代码重写如下,以删除不必要的依赖项。我还使用an 作为参数来保持简单。 输出始终为: 我无法弄清楚这里出了什么问题。 谢谢。 问题答案: 可悲的是,修改在异步回调参数是没有意义的。 从官方文件: 参数可以提供默认

  • 我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它

  • 当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。

  • 我试图使用来传输我根据前面的问题设置的自定义标头。 我在文件中读到... 我的属性包括: