我有一个包含多个表单的页面,我通过串行方式通过Ajax POST提交。起初,我尝试使用同步XHR请求,但这会导致浏览器在请求期间锁定,并破坏我的DOM操作效果,这是不可接受的。所以我最终使用的模式基本上是这样的:
var fcount = 0; // incremented for each form to be submitted
function submit_form( num ) {
var fdata = { ... }; // data from form # num
$.ajax( { async: true,
url: '/index.cgi',
data: fdata,
type: 'POST',
success: function() {
if ( num < fcount ) {
submit_form( ++num );
}
}
} );
}
$( '#submit_form_btn' ).click( function() { submit_form( 1 ) } );
递归让我觉得这是一个基本上是迭代问题的丑陋解决方案。是否有更清洁或更优雅的方式可以处理?
答案 0 :(得分:10)
这些请求是幂等的吗?如果他们是你可以简单地一个接一个地解雇他们。否则你会受到AJAX异步性质的限制。
<强>更新强>
我做了更多的研究,显然存在一个名为jQuery Message Queuing的框架,它通过消息队列来处理串行AJAX请求。也许这可以帮到你。
答案 1 :(得分:1)
更简洁的方法是维护一个你想要制作的回调(ajax请求)队列并逐个解雇它们。
答案 2 :(得分:0)
我想说在服务器上提高脚本的超时时间并在一个POST中发送所有内容。
答案 3 :(得分:0)
如果您想要做的是您的代码所做的事情,那么使用递归结构就好了。
但这里的可疑部分是使用多个电话,你浪费了很多时间提交多个电话。将所有数据粘贴在一个调用中,如果以任何可能的方式将其结束,则将其作为首选方法。