我想在一个循环中提交2000个表单,每个提交延迟6秒。这意味着,在12000秒之后,所有表格都会被提交。
另外,我应该说我不能使用Ajax或cURL。
我只能使用jQuery中的Form submit()
函数,因为服务器阻止了其他方式。
我已经尝试过这段代码,但它不起作用:
x= 0;
for(i = 0; i < 100; i++) {
x++;
window.setInterval(function(){ $('form[target*=x'+x+']').submit();} ,6000);
}
此代码只提交最后一个表单,意思是表单编号100 !!!
谢谢!
答案 0 :(得分:0)
我无法理解为什么你说cURL或Ajax只要一个人可以像浏览器请求那样工作而另一个人在客户端运行就不会工作。只要您在浏览器中看到该页面并且启用了js,两者都可以正常工作。
但是,我确实有一个答案:提交给iframe
目标。
这不会重新加载页面,如果脚本来自同一个域(没有跨域违规),您可以访问响应内容。
大概你在页面中有这种HTML安排:
<form action="?" method="post">
<input name="name" />
<input type="submit" />
</form>
<form action="?" method="post">
<input name="name" />
<input type="submit" />
</form>
<form action="?" method="post">
<input name="name" />
<input type="submit" />
</form>
<form action="?" method="post">
<input name="name" />
<input type="submit" />
</form>
<form action="?" method="post">
<input name="name" />
<input type="submit" />
</form>
<form action="?" method="post">
<input name="name" />
<input type="submit" />
</form>
.....
这个小脚本会在页面中添加iframe
,获取表单并将其提交给之前创建的iframe
:
var $frame = $('<iframe name="post_form_frame" style="display:block">');
$('body').append($frame);
var frameName = $frame.attr('name');
var $forms = $('form');
var submitInterval = 6000;
var size = $forms.size();
var current = 0;
var submitChain = function(){
if (size === current){
//console.log('finished');
return;
}
var $form = $forms.eq(current);
// store the assign target
var target = $form.attr('target');
// set the attribute and submit
$form.attr('target', frameName).submit();
//console.log('form '+current + ' submitted');
$form.attr('target', target);
current++; // increment the current
setTimeout(submitChain, submitInterval); // schedule next submission
};
submitChain();