問題: 當后台獲取到前台傳來的文件時(例如上傳功能, 導入功能), 返回類型為application/json, 這個時候響應到前端的JSON格式的數據格式可能是:
<pre style="word-wrap: break-word; white-space: pre-wrap;">{"JsonKey":"JsonValue"}</pre>
這個是不同瀏覽器對返回數據處理的問題。
解決方法:
1. 在前端解決
var reg = /<pre.+?>(.+)<\/pre>/g; var result = data.match(reg); data = RegExp.$1;
data就是后台返回前端的數據, 用正則表達式處理一下即可。
2. 在后台解決
將返回的類型從application/json改為text/html
這個解決方法因為每個系統后台采用Struts或者SpringMVC不同可能處理有點不一樣在此就不舉例了。
上傳File時,瀏覽器總是添加<pre>的解決辦法
在使用Structs的FileUpload組件進行上傳文件的時候,在返回的JSon字符串里面總是莫名其妙的添加了<pre>標簽,例 如返回內容為"{\"message\":\"導入文件已成功\",\"result\":\"OK\"}",在瀏覽器里面就變成了"<pre style="word-wrap: break-word; white-space: pre-wrap;">"{\"message\":\"導入文件已成功\",\"result\":\"OK \"}"</pre>",這樣就導致Ajax解析返回值的時候出現錯誤。
我的上傳代碼,默認總是進入到error的處理中。
jQuery.ajaxFileUpload({
type:"POST", url:"/****/upload.action?file="+fileName, secureuri:false, fileElementId:"upload", dataType: "json", success:function (data, status) { if (data != null) { data = JSON.parse(data); MBJ.alert("提示", data.message); } else { MBJ.alert("提示", "上傳文件出錯, 服務器返回錯誤信息: status = " + status); } }, error:function (data, status, e) { MBJ.alert("提示", "上傳文件出錯: status = " + status); } });
谷歌了一圈之后,發現很多人和我是一樣的,解決辦法都是把response的返回類型設置為【text/html】。在Struts2中需要在Action的配置中這樣設置。
<
result
name="success" type="json">
<
param
name="root">msg</
param
>
<
param
name="contentType">text/html;charset=UTF-8</
param
>
</
result
>
|
如果用的是annotation的方式的話,需要加上這句話
@Action(value = "upload", results = { @Result(name = SUCCESS, params = { "root", "msg", "contentType",
"text/html;charset=UTF-8" }, type = "json") })