【发布时间】:2010-04-11 04:41:18
【问题描述】:
我有一个包含多个表单的页面,我通过 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 ) } );
对于本质上是一个迭代问题的问题,递归给我的印象是一个丑陋的解决方案。有没有更干净或更优雅的方式来处理这个问题?
【问题讨论】:
-
为什么要一块一块地发送数据?是否有很多类似的东西?
-
@Matti - 每个请求都需要一点时间来处理(需要修改的文件上传)。在单个请求中处理太多了。
-
迭代和递归并不像它们最初出现的那样不同(stackoverflow.com/questions/931762/…,mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2)。由于您正在处理异步回调,因此堆栈增长并不是什么大问题。
-
我不太担心堆栈大小——只是想看看是否有一种不那么迂回的方式来做同样的事情。
标签: javascript jquery ajax recursion xmlhttprequest