防止jQuery AJAX调用等待上一次调用完成
我搜索了SO,每个问题似乎都在问如何等待 AJAX调用完成。 我问如何不等待 AJAX调用完成。
我有一个电子商务网站,通过PHP做一些繁重的图像处理。 通过AJAX调用触发操作。
我试图加快用户体验,所以我修改了代码,首先让PHP渲染一个缩略图(操作快速完成),然后触发第二个AJAX调用,告诉PHP渲染完整的图像(这可能需要一些分钟)。
“添加到购物车”操作也是一个AJAX调用。 问题是在上一次AJAX调用完成之前,“添加到购物车”调用无法完成。
序列:
- AJAX调用A生成请求缩略图。
- 呼叫A的成功回调:
一个。 显示/启用“添加到购物车按钮”
湾 触发AJAX调用B,以生成完整图像。 - 单击“添加到购物车”会触发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,否则会话不会立即关闭。