【发布时间】:2014-05-30 00:37:45
【问题描述】:
我已经搜索过,每个问题似乎都在询问如何等待 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 调用?
【问题讨论】:
-
在第一个 ajax 请求设置中设置 async:false
-
@janina 在 99.99% 的用例中,ajax 应该是异步的,我看不出它如何解决看起来像服务器端问题的 OP 问题,一次处理多个请求.编辑:好的,我知道它如何解决 OP 的问题,但他仍然不应该使用它
-
@ShawnC - 不错。实际上,我在搜索中没有找到它们,而且它们很有希望。