在使用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") })