返回Json數據瀏覽器帶上
標簽解決方法


問題:  當后台獲取到前台傳來的文件時(例如上傳功能, 導入功能), 返回類型為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") })

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM