我想以这种方式进行Ajax调用的堆栈:call(n-1)完成后,call(n)开始…
由于多种原因,我无法使用 async:false :
我无法以这种方式链接我的请求:
$.post('server.php', {param:'param1'}, function(data){ //process data $.post('server.php', {param:'param2'}, function(data){ //process data }); });
因为请求的数量和参数是根据用户输入动态创建的。
一个小例子说明了我的问题。
您将看到服务器响应顺序是随机的,我要实现的是按顺序排列
Response to arg1 Response to arg2 Response to arg3 Response to arg4 Response to arg5 Response to arg6
任何帮助将不胜感激,谢谢。
好的,jQuery Ajax返回Deferred Object,这可以帮助您实现这一目标。
这是操作方法:
var args = ['arg1','arg2','arg3','arg4','arg5','arg6']; deferredPost(0, 5); function deferredPost(index, max){ var delay = Math.random()*3; if (index<max){ return $.post('/echo/html/', {html:('Response to '+args[index]), delay:delay}, function(data){ $('#response').append(data+'<br>'); }).then(function(){ deferredPost(index+1, max); }); } else { return $.post('/echo/html/', {html:('Response to '+args[index]), delay:delay}, function(data){ $('#response').append(data+'<br>'); }); } }
演示
在这里,我用 那么 函数。
我还建议多读一些有关延迟对象的知识,它们可以解决几个常见问题。