之前開發時遇到的一個問題,使用easyui的form送出表單,在Chrome下時沒問題的,但是在IE下出現類似附件下載下傳時提示是否儲存的現象。

這裡記錄一下如何解決的。其實這個現象不光是easyui的form,還有其他一些form插件也是一樣的,使用不當就會遇到這個問題。
前台:
背景:
結果:
Chrome是這樣↓
IE是這樣↓,不科學啊?

怎麼解決?改背景的Action的傳回的content-type改為text/html:
為什麼?因為JsonReslut預設傳回給浏覽器的content-type類型是:application/json,(←等于沒說)。
奇怪了,我們平時通過jQuery的ajax方法來送出資料、請求資料不都挺正常的嗎,沒出現過這個情況啊,浏覽器相容性jQuery已經幫我們處理好了啊,這個easyui的form方法也是無重新整理送出表單啊,應該也是ajax吧。問題就在這裡,這個easyui的form送出表單并不是真的ajax。我們來看看easyui-form的源碼(正好1.4.2版本的jquery.form.js有源碼):
看我标為紅色的,其他的我現在不關心,就先省略了。
我們看到easyui的作者寫了一個ajaxSubmit方法(不仔細看内容還真以為是一個ajax方法呢)。方法裡面動态構造了一個隐藏的iframe,然後把我們要送出的form的target指向了構造出來的這個隐藏的iframe,給這個iframe設定了load事件回調方法用來處理響應。重要的是那句“form[0].submit()”,這是什麼,這就是直接在送出表單啊,哪兒有什麼ajax,隻是保證了頁面無重新整理。(好吧,我承認我了解的ajax概念比較狹隘)
IE浏覽器對于application/json的非ajax的響應的處理比較特殊,我這裡指的是相當于你在IE的位址欄上輸入了一個url,而伺服器傳回的content-type是application/json,我猜是IE預設是不能直接處理application/json的響應,是以就提示下載下傳了。
而Chrome則預設對application/json是當做文本來處理的,是以可以正常顯示。
我們看出ajax的響應實際上就兩種,一種當做純文字處理,另一種當做xml處理。是以jQuery的ajax預設對于application/json或者text/html都會當做文本處理的,ajax是沒有一種處理方式是“下載下傳儲存”的方式的。
這樣應該比較好了解這個問題了。
可以比較一下用真的ajax來送出表單,不管背景傳回的是application/json或者text/html處理都是一緻的: