Ajax 调用阻止其他 javascript 代码

Posted

技术标签:

【中文标题】Ajax 调用阻止其他 javascript 代码【英文标题】:Ajax call blocking other javascript code 【发布时间】:2016-11-10 14:14:52 【问题描述】:

我在页面上使用 flex 滑块,并且页面还为其他工作进行 ajax 调用。我的问题是当用户加载页面时,ajax 调用 会阻止 flex 滑块,直到 ajax 请求尚未完成。完成 ajax 请求后,flex 滑块加载成功。如果我删除 ajax 脚本,则 flex 滑块加载速度非常快。

Flex 滑块和 ajax 请求都写在这段代码之间...

$(document).ready(function()
    $('#carousel').flexslider(
        animation: "slide",
        controlNav: true,
        animationLoop: true,
        slideshow: false,
        itemWidth: 100,
        itemMargin: 15,        
        asNavFor: '#slider'        
    );

    // Rest code of slider will come here

    // Ajax code start from here    
    $.ajax( 
            type: "GET",
            async:false,
            url: prefixUrl, 
            success: function(results)  
                    $(results).insertBefore('.event_container'); 
            
        );

);

请提出任何想法,以免 ajax 调用阻塞 flex 滑块。

谢谢

【问题讨论】:

如果您不希望它阻塞,请不要将 async 设置为 false。 @kinakuta# 更改 async:true 后也不工作 控制台没有错误 你说“不工作”......会发生什么,你期望什么 “不工作”意味着同样的事情发生 【参考方案1】:

Async false 将等到您的操作完成。

试试这个:

$.ajax( 
        type: "GET",
        async:true,
        url: prefixUrl, 
        success: function(results)  
                $(results).insertBefore('.event_container'); 
        
    );

//更新2:

实际上它正在发生,因为您已经在就绪函数中添加了 Ajax,所以在您的 ajax 运行之前,页面就绪事件还没有完成。尝试从准备好的文档中删除它。

【讨论】:

我添加了新的 cmets,请尝试一下..希望能解决您的问题 Ya # 使用 async:true 后,它正在工作,但 ajax 没有给出正确的响应意味着 async:false 给出 6 列结果但 async:true 给出 3 列结果。你能建议如何处理这个问题吗? 你的ajax有依赖吗? 你能为此创建一个小提琴吗..我无法完全解决你的问题 async: false 没问题,但 async: true 没有按顺序给出响应 jsfiddle.net/anilk1797/y7yhd/49 我想要相同的结果,但使用 async: true。【参考方案2】:

我们使用 ajax 不进行回发操作,在您提到的代码中,您提到的 async: false 会导致同步 ajax 调用。同步 ajax 调用使您停止/阻止,直到您获得上一个请求的响应。所以试试这个:

$.ajax( 
    type: "GET",
    url: yourURL, 
    success: function(results)  
            $(results).insertBefore('.event_container'); 
    ,
    async:true
);

【讨论】:

更改 async:true 工作速度很快,但在 ajax 请求完成后再次加载 flex 滑块。是否有任何其他选项使 flex 滑块和 ajax 调用不相互依赖?

以上是关于Ajax 调用阻止其他 javascript 代码的主要内容,如果未能解决你的问题,请参考以下文章

AJAX调用会阻止导航到其他页面,直到完成为止

event.preventDefault 阻止 ajax 调用

长轮询冻结浏览器并阻止其他 ajax 请求

JSF 2.0 AJAX:使用 jsf.ajax.request(或其他方式)从 javascript 调用 bean 方法

Ajax POST 到 Laravel API 偶尔会被 CORS 阻止

如何阻止bootstrapvalidatory验证通过自动提交表单