Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE9在302之后重新提交表单-可能是由于递归setTimeout()调用_Javascript_Internet Explorer_Jquery_Settimeout_Form Submit - Fatal编程技术网

Javascript IE9在302之后重新提交表单-可能是由于递归setTimeout()调用

Javascript IE9在302之后重新提交表单-可能是由于递归setTimeout()调用,javascript,internet-explorer,jquery,settimeout,form-submit,Javascript,Internet Explorer,Jquery,Settimeout,Form Submit,我在IE9中看到了以下内容 Javascript通过.submit()提交表单 服务器成功返回302 IE确实得到了重定向的URL IE通过.submit()重新提交表单 提交发生在一个函数内部,该函数通过setTimeout递归调用自身,我认为这可能是罪魁祸首。但从逻辑上讲,我认为提交不会发生两次。下面是函数: function callback() { "use strict"; var poll_timeout, // setting a var in case we n

我在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();
    }
    
    函数回调(){
    “严格使用”;
    var poll\u timeout,//设置一个var,以防我们需要终止超时中间计数
    poll_counter=0,//启动计数器
    max_polls=10;//设置最大计数
    函数doPoll(){
    如果(poll\u counter
    我不熟悉jQuery的
    $.post
    如果这与
    $.ajax
    不同,但我会这样做,以防止我们成功后轮询超时再次运行:

    if (success) {
        clearTimeout(poll_timeout);
        $("form#checkout").off('submit', Store.cancel_submit)
        $('form#checkout').submit();
    } else {
        // do it again
        poll_timeout = setTimeout(doPoll,10000);
    }