我有一些JavaScript,可以触发对PHP脚本的约100次调用。php脚本会占用大量内存,并需要几秒钟才能完成,然后返回通过或失败的json响应。
我不希望ajax调用是异步的,因为服务器将停止运行其自身的100个实例,因此我尝试使用同步,唯一的问题是它冻结了网页,同时一次调用了一个脚本。
如何一次关闭一个Ajax调用并且不冻结我所在的页面?
var a = []; a[0] = 'test'; a[1] = 'hello'; a[2] = 'another'; $(document).ready(function(){ $.each(a, function(k,v) { $.ajax({ url:'/this-script-takes-a-few-seconds-to-complete.php', async:false, data: {foo: v}, success: function(data){ console.log(data); } }); }); });
您可以放入执行下一个调用的函数,然后从success处理程序中调用该函数,如下所示:
success
$(function(){ var i = 0; function nextCall() { if(i == a.length) return; //last call was last item in the array $.ajax({ url:'/this-script-takes-a-few-seconds-to-complete.php', data: { foo: a[i++] }, success: function(data){ console.log(data); nextCall(); } }); } nextCall(); });
虽然…更好的方法是不进行100次呼叫,除非这是某种测试套件,否则我将重新研究整个方法。