2010-10-18 76 views
2

有一組支持原型的ajax代碼,可以在IE以外的所有瀏覽器中使用。在IE8中,JSON會返回到Ajax.Request中指定的onSuccess處理函數中,並被扔到文件下載流中,該流將彈出並提示下載位置。Internet Explorer 8中的Prototype Ajax.Request問題提示文件下載

askForm = $('askForm'); 
var askUrl = '.'; 
var askParameters = askForm.serialize(true); 
askForm.disable(); 

var askAjax = new Ajax.Request(
    askUrl, { 
    method: 'post', 
    parameters: askParameters, 
    onSuccess: handleResults, 
    onFailure: handleError 
    } 
); 

function handleError(transport) { 
    alert('Please refresh this page, an error occurred in processing at the server.'); 
} 

function handleResults(transport) { 
... 
} 

handleResults函數中有更多的代碼,但是這個函數永遠不會被調用。經過調試後,在調用Ajax.Request函數時會出現下載提示。

文件名IE8提示每次下載更改,4個看似隨機的十六進制值(8個字符),沒有文件擴展名。和文件的內容從服務器純JSON響應...

{"question": ["Enter your question*"], "name": ["Enter your name (First L.)*"], "sender": ["Enter your e-mail*"]} 

會非常感激這裏的任何提示。這發生在Snow Leopard上,運行在VMWare Fusion中的IE8運行在OS X上訪問通過apache/django/python運行的站點。但是,由於VMWare Windows XP機器中的Chrome和Firefox正常運行,似乎直接指向IE8作爲罪魁禍首。

回答

3

此問題已解決。瘋狂的問題在這裏,但事實證明,有一個JavaScript錯誤,阻止腳本執行和標準表單提交發生通過瀏覽器,從而返回AJAX代碼作爲文件下載提示。該表單的設計方式是禁用JavaScript的瀏覽器仍然可以使用不帶Ajax的表單,並使用名稱爲「js」的隱藏輸入字段。當通過AJAX提交時,javascript會將此字段的值留空,以讓服務器知道響應應該是JSON而不是整頁刷新。那麼,正常處理js字段值的那部分javascript,然後腳本錯誤,因此event.stop()JavaScript從未執行。導致表單作爲標準提交按鈕單擊處理,通過瀏覽器發送POST請求。

注意在上面的代碼...

askForm = $('askForm'); 

這顯然應該是...

var askForm = $('askForm'); 

感謝,允許這種語法的瀏覽器,但它送我上IE8雁追逐結果。永遠學習。

0

將JSON發送到瀏覽器的服務器端文件是否發送正確的標題?如果它不將自己標識爲JSON,則瀏覽器可能會將其視爲要下載的文件。

+0

使用指定mimetype =「text/javascript」的django.http.HttpResponse對象發送響應 - 也許我應該考慮修改它還是添加其他標頭? – sansjoe 2010-10-18 14:34:59

+0

附錄:剛試過mimetype作爲'application/json',IE8的行爲沒有任何變化。 – sansjoe 2010-10-18 14:40:31