防止jQuery AJAX调用等待上一次调用完成

时间:2014-04-15 14:57:21

标签: php jquery ajax image

我搜索了SO,并且每个问题似乎都在询问等待如何完成AJAX调用。我问不要等待以完成AJAX调用。

我有一个电子商务网站,通过PHP进行一些繁重的图像操作。通过AJAX调用触发操作。

我正在尝试加快用户体验,所以我修改了代码,首先让PHP渲染缩略图(操作快速完成),然后触发第二个AJAX调用,告诉PHP渲染完整的图像(可以花几分钟时间。)

“添加到购物车”操作也是一个AJAX调用。 问题是在上一次AJAX调用完成之前,“添加到购物车”调用无法完成。

序列:

  1. AJAX调用A生成请求缩略图。
  2. 致电A的成功回调:
    一个。显示/启用“添加到购物车按钮”
    湾触发AJAX调用B,以生成完整图像。
  3. 点击“添加到购物车”会触发AJAX呼叫C,直到呼叫B完成才会完成。
  4. 相关的javascript:

    /** Call A - make call for thumbnail generation **/
    $.ajax({
        url: 'index.php?route=decorable/image/thumbnail',
        type: 'post',
        data: image_data,
        dataType: 'json',
        success: function(json) {
            if (json['success']) {
                $('#button-cart').show();
                /** Call B - make call for *full* layout generation **/
                $.ajax({
                    url: 'index.php?route=decorable/image',
                    type: 'post',
                    data: image_data,
                    dataType: 'json'
                 });
        });
    
    /** Call C - this AJAX call starts, but does not complete, until call B completes **/
    $('#button-cart').click(function() {
        $.ajax({
            url: 'index.php?route=checkout/cart/add',
            type: 'post',
            data: cart_data,
            dataType: 'json',
            success: function(json) { 
                if (json['success']) {      
                    $('.success').fadeIn('slow');
                }
            }
        });
    });
    

    我是否误解,或者即使呼叫B未完成,也应该致电C完成?

    如果您认为 PHP正在保持这种体验,那么有没有一种方法可以让我触发PHP开始执行,但是仍然会为缩略图AJAX调用发回响应?

3 个答案:

答案 0 :(得分:6)

根据我的经验,这是由PHP会话使用引起的,当您在代码中确定(所有ajax请求)时您不必修改会话,那么您应该调用:

session_write_close()

这将允许同时进行其他请求。

进一步阅读:http://www.php.net/manual/en/function.session-write-close.php

答案 1 :(得分:0)

大多数浏览器都支持最多两个异步请求。你无能为力。

答案 2 :(得分:0)

请注意,只有应用session_write_close()[Jono20201的回答]可能无法解决问题,如果您已启用输出缓冲(默认情况下为PHP 7+)。你必须在php.ini中设置output_buffering = Off,否则会话不会立即关闭。