隨着前端和AJAX LIB當我使用Ext JS的,我遇到以下問題:服務器響應變得古怪加密/解碼中使用特殊字符
我上傳一個文件,該文件將被上傳到後端後端用存儲庫中相應的文件路徑回答,包括一些元數據。整個答案是一個HTML結構中的JSON。 (這需要做,因爲Ext JS的文件上傳創建一個隱藏的iframe和否則iFrame的域名從瀏覽器不同)
與響應裏面以下路徑後端答案:
/documents/test/uploadTesthtml_ü_&/uploadTesthtml_ü_&.jpg
在網絡面板中,路徑是正確的。但只要成功處理踢,響應包含以下路徑:
/documents/test/uploadTesthtml_ü_&/html_ü_&.jpg
我得到的,這是非常令人迷惑明白,當你還沒有看到它的生活,但我們需要爲此準備具體的用例,我希望你可以按照我的解釋。
編輯的答案@亞歷山大的評論:
我們使用的是Java後端,並使用以下HTML結構圍繞我們的JSON響應:
<html>
<head>
<script>
function doDomainRelaxing() {
var x = location.hostname.indexOf('.') + 1;
if (x > 0)
document.domain = location.hostname.substring(x);
}
doDomainRelaxing();
</script>
</head>
<body>
[{...}] //JSON response
</body>
</html>
據我所知,原因是,ExtJS使用隱藏的iFrame進行文件上傳,它將接收來自服務器的響應,之後,從iFrame獲取響應以僞造response.responseText。我們的瀏覽器彈出窗口的域名放寬了,但是iFrame的域名並沒有,因此我們遇到了同樣的源策略問題,response.responseText爲空。爲了解決這個問題,我們使用提到的HTML包裝來放鬆iFrame的領域。
你使用了什麼後端?我們將文件上傳到C#後端不使用任何HTML結構,它是一個特殊調整的JSON響應,適用於所有文件名。 – Alexander