2011-11-30 80 views
6

有时在我的页面上,我会同时执行很多ajax调用。这个想法是每个元素在数据变得可用时都会被更新(我不想排队调用)。但是,有时候,网页在所有ajax调用完成之前都不会更新任何元素。例如,我正在更新一行中的四张图片 - 每张图片都有自己的ajax回调函数,一旦数据可用,它将更新它的源代码;代码看起来是这样的:页面在更新之前等待所有AJAX调用完成

for (var i = 0; i < numPictures; i++){ 
    Dajaxice.Images.load_picture(callback_function, {'pictureId': i}); 
} 

的CALLBACK_FUNCTION将图像到它的UI元素一旦其准备:

imgSnippet = '<img src="' + data.img_source + '"/>' 
$("#" + data.container_id).html(imgSnippet); 

(数据是从服务器接收到这个函数的对象)

我正在使用(如您在示例中看到的)dajax(用于django的插件)用于AJAX功能。在服务器端,我有一个Apache(2.2)通过mod_wsgi运行django 1.3。

当执行时,即使某些ajax调用较早完成(我可以在我的服务器上看到它),页面将不会更新任何元素,直到最后一次调用返回。

有什么建议吗?

感谢,

+1

这是http://stackoverflow.com/questions/7504264/ajax-simultaneous-loading-of-multiple-images的重复,其中人们似乎已经回答了您的问题。情况并非如此吗? – dyoo

+1

ajax调用是否同步?如果是这样,您可能无法获得屏幕更新,直到您将javascript控件返回给系统。 – jfriend00

+0

@dyoo:好点,但实际上并非如此。我看到这发生在多线程Apache服务器上 – Goro

回答

1

我建议做一个数组来保存所有的图像,并作出新的功能,将显示图像时,按年增长得到了他们所有的服务器,并在回调的foreach图像增加q预定义的计数器,当该计数器等于图像的数量显示的照片和零计数器,你可以把图片应该直到其中的所有地方的加载qll你 对不起,我没有写你的代码,但我在手机上如果我的回答不明确,我可能会稍后再发布它

1

您可能可以通过将回调函数的内容用setTimeout呼叫时间为0或1毫秒。这样可以让系统更新屏幕。

相关问题