javascript – Google Chrome:XMLHttpRequest.send()在执行POST时无法正常工作

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

它在IE和Firefox中运行良好,但在Chrome和Safari中却没有那么多.

问题是即使在XMLHttpRequest对象上调用了send(),也没有任何请求,如Fiddler中所见.

更具体地说,事件处理程序放在窗体的“submit”事件上,在窗口上放置一个超时函数调用:

window.setTimeout(startPolling, 10);

并且在此函数中启动“startPolling”序列,该序列继续触发GET请求以从Web服务接收状态更新,该Web服务返回可用于更新UI的text / json.

这是基于WebKit的浏览器的限制(可能是安全性吗?)?这是Chrome错误吗? (我在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.
});
});
点赞