簡體   English   中英

Google Chrome瀏覽器:執行POST時XMLHttpRequest.send()不起作用

[英]Google Chrome: XMLHttpRequest.send() not working while doing POST

我正在開發一個應用程序,該應用程序允許用戶使用表單(POST請求)發送文件,並在上傳文件時執行一系列GET請求,以收集有關上傳狀態的信息。

它在IE和Firefox中可以正常工作,但在Chrome和Safari中則不能。

問題在於,即使在XMLHttpRequest對象上調用了send(),也沒有請求任何內容,就像在Fiddler中看到的那樣。

更具體地說,將事件處理程序放置在窗體的“ submit”事件上,該事件處理程序在窗口上放置一個超時函數調用:

window.setTimeout(startPolling, 10);

並在此函數中啟動“ startPolling”序列,該序列不斷觸發GET請求,以從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.
});
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM