IE9在302之后重新提交表单-可能是由于递归setTimeout()调用
IE9 resubmitting form after 302 - possibly due to recursive setTimeout() call
我在IE9 中看到以下内容
- Javascript通过.submit()提交表单
- 服务器成功返回302
- IE在重定向的URL上获取
- IE通过.submit()重新提交表单
提交发生在一个函数内部,该函数通过setTimeout递归地调用自己,我认为这可能是罪魁祸首。但从逻辑上讲,我不认为提交会发生两次。功能如下:
function callback() {
"use strict";
var poll_timeout, // setting a var in case we need to kill the timeout mid count
poll_counter = 0, // start a counter
max_polls = 10; // set a max count
function doPoll() {
if (poll_counter < max_polls) { // make sure we're not above the count
poll_counter++; // increment the counter
$.post("/someUrl", function (success) {
// ajax it
if (success) {
$("form#checkout").off('submit', Store.cancel_submit)
$('form#checkout').submit();
} else {
// do it again
poll_timeout = setTimeout(doPoll,10000);
}
});
}
}
doPoll();
}
如果jQuery的$.post
与$.ajax
不同,我对它并不熟悉,但我这样做是为了防止在成功后再次运行poll_timeout:
if (success) {
clearTimeout(poll_timeout);
$("form#checkout").off('submit', Store.cancel_submit)
$('form#checkout').submit();
} else {
// do it again
poll_timeout = setTimeout(doPoll,10000);
}
相关文章:
- 为什么setTimeout适用于无休止的递归调用
- 有没有一种方法可以用步骤递归调用jQuery animate()
- 在Dojo类中递归调用setTimeout时是否存在内存泄漏
- 递归调用异步函数
- 递归调用相同的函数
- 计算一个函数在JS中被递归调用的次数
- 如何在 Javascript 中递归调用存储在变量中的函数
- 如果回调调用封闭函数,它是否被称为递归调用
- 无法从响应的结束事件中对 Http.Request 进行递归调用
- JavaScript中的递归调用不起作用
- KO 计算递归调用
- 删除数组递归调用模式中的项
- 无法在 Javascript 中进行递归调用
- 如何递归调用承诺函数
- Javascript 堆栈和递归调用
- 无法在 javascript 中使用 settimeout 递归调用函数
- 原型函数中的递归调用
- 在 Javascript 中递归调用“父”构造函数
- AngularJS:使用$timeout递归调用函数时的RangeError
- JavaScript 理解递归调用代码清理中的上下文,没有“with”关键字