Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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 Google Chrome:XMLHttpRequest.send()在执行POST时不工作_Javascript_Ajax_Google Chrome - Fatal编程技术网

Javascript Google Chrome:XMLHttpRequest.send()在执行POST时不工作

Javascript Google Chrome:XMLHttpRequest.send()在执行POST时不工作,javascript,ajax,google-chrome,Javascript,Ajax,Google Chrome,我正在开发一个应用程序,它允许用户使用表单(POST请求)发送一个文件,并在上载该文件时执行一系列GET请求,以收集有关上载状态的信息 它在IE和Firefox中工作得很好,但在Chrome和Safari中就没那么好了 问题是,即使在XMLHttpRequest对象上调用send(),也没有像在Fiddler中看到的那样请求任何内容 更具体地说,事件处理程序放置在表单的“提交”事件上,该事件在窗口上放置超时函数调用: window.setTimeout(startPolling, 10); 在

我正在开发一个应用程序,它允许用户使用表单(POST请求)发送一个文件,并在上载该文件时执行一系列GET请求,以收集有关上载状态的信息

它在IE和Firefox中工作得很好,但在Chrome和Safari中就没那么好了

问题是,即使在XMLHttpRequest对象上调用send(),也没有像在Fiddler中看到的那样请求任何内容

更具体地说,事件处理程序放置在表单的“提交”事件上,该事件在窗口上放置超时函数调用:

window.setTimeout(startPolling, 10);
在这个函数中,启动“startPolling”序列,该序列不断触发GET请求,以接收来自web服务的状态更新,该web服务返回可用于更新UI的文本/json


这是基于WebKit的浏览器的限制吗(可能是安全方面的限制)?这是一个Chrome bug吗?(不过,我在Safari中看到了同样的行为)。

我遇到了完全相同的问题。目前,我使用一个iframe,它是表单中的目标。这允许在发布时执行xhr请求。虽然这确实有效,但如果有人禁用javascript,它不会优雅地降级(如果没有js,我无法在iframe之外加载下一个页面),因此如果有人有更好的解决方案,我将不胜感激

以下是jQuery脚本供参考:

$(function() {
$('form[enctype=multipart/form-data]').submit(function(){ 
    // Prevent multiple submits
    if ($.data(this, 'submitted')) return false;

    var freq = 500; // freqency of update in ms
    var progress_url = '{% url checker_progress %}'; // ajax view serving progress info 

    $("#progressbar").progressbar({
        value: 0
    });

    $("#progress").overlay({ 
        top: 272, 
        api: true,
        closeOnClick: false,
        closeOnEsc: false, 
        expose: { 
            color: '#333', 
            loadSpeed: 1000, 
            opacity: 0.9 
        }, 
    }).load();

    // Update progress bar
    function update_progress_info() {
        $.getJSON(progress_url, {}, function(data, status){ 
            if (data) {
                var progresse = parseInt(data.progress);
                $('#progressbar div').animate({width: progresse + '%' },{ queue:'false', duration:500, easing:"swing" }); 
            }
            window.setTimeout(update_progress_info, freq);
        });
    };
    window.setTimeout(update_progress_info, freq);

    $.data(this, 'submitted', true); // mark form as submitted.
});
});

我从来没有听说过。在Chrome中,其他基于AJAX的上传进度指示器对我来说还可以。让我们再编写一些代码/测试用例。它会在发送下一个轮询请求之前等待上一个轮询请求完成吗?它会。处理一个请求会触发下一个请求的新setTimeout。不过,除了邮局,没有人出去。