[英]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.