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

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

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

我试图加快用户体验,所以我修改了代码,首先让PHP渲染一个缩略图(操作快速完成),然后触发第二个AJAX调用,告诉PHP渲染完整的图像(这可能需要一些分钟)。

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

序列:

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

相关的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调用?

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

session_write_close()

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

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

大多数浏览器都支持最多两个异步请求。 你什么都不能做。

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