檔案上傳功能在 IE9+、Firefox、Chrome 均正常,唯獨 IE8 表現異常:檔案確實上傳至伺服器、瀏覽器狀態列顯示成功,但 `success`、`error`、`complete` 等所有回調函數均不觸發。
`jquery.form.js` 內部對檔案上傳採用隱藏 `
// Java/Spring MVC 範例
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.write("");
out.flush();
var options = {
// ... 原有設定
dataType: 'json', // 期望 JSON
iframe: true, // 強制 iframe 模式
iframeSrc: 'javascript:false;', // 避免 IE8 "非安全內容" 警告
success: function(responseText, statusText, xhr, $form) {
// 手動解析 textarea 內容
var data = typeof responseText === 'string'
? $.parseJSON($(responseText).find('textarea').text())
: responseText;
// 原有成功邏輯
handleSuccess(data);
}
};
$('#uploadForm').ajaxSubmit(options);
若專案已放棄 IE8 支援(Microsoft 2016 年停止更新),建議直接使用現代 API,程式碼更簡潔、穩定。
IE8 回調失效 90% 是「回應 Content-Type 錯誤」或「iframe 事件時序」導致。調整回應為 `text/html` + `