Ext 使用FileUploadField 上傳文件 Uncaught SyntaxError: Unexpected token

最近在用 extjs3做一個項目,做到文件上傳的功能的時候,測試發現在火狐瀏覽器下沒問題,但是在google瀏覽器下就會報錯的問題,具體錯誤見下面截圖

這裏寫圖片描述

就是這個Uncaught SyntaxError: Unexpected token <
at doDecode (ext-all-debug.js:4242)的 報錯 經過我的調試,發現是extjs對 json的解析問題

這裏寫圖片描述

那麼問題來了,之前我的解析是沒問題的,爲什麼到這個文件上傳的時候會出問題呢?我感覺應該是我後臺的返回值不是json格式才導致的 chrome瀏覽器不能正常解析我的返回數據,在網上也找到了類似的問題,
比如說篇文章,http://www.thinksaas.cn/topics/0/88/88439.html 裏說到通過修改解析方法

<script type="text/javascript">
Ext.USE_NATIVE_JSON = true;
window.JSON = {
"stringify":Ext.util.JSON.doEncode,
"parse":function(json){
var str = json;
var spos = str.indexOf(">");
var epos = 0;
if(spos != -1){
 epos = str.indexOf("<",spos);

str = str.substr(spos+1,epos-spos-1); 
}
return eval("("+str+")");
},
"toString":function(){
return '[object JSON]';
}
};
</script>

但是這個方法並不能真正解決問題,還會帶來當前頁面的其他json解析出問題,比如說我的時間控件就不好使了,然後我又需要修改時間控件。還是麻煩….後來心想,那我後臺的返回結果不是json 那是什麼呢?
經過一系列的查找資料,終於找到原因了:如下描述

js頁面設置了fileUpload:true,後臺會將整個form當成文件流進行解析,後臺返回結果的時候,默認也將返回的json格式當成了文件流處理,那麼返回的格式就不是json格式了。

解決方法:通過修改struts2的xml配置文件,聲明我們傳出來的格式就是 text/html格式即可,修改代碼如下:

<action name="uploadFile" class="com.edu.fzu.zemafd.util.UploadAction" method="uploadImages">
             <interceptor-ref name="fileUpload">
                <param name="maximumSize">804857600</param>
                <param name="allowedTypes">
                    application/msword,image/x-png,application/excel,application/vnd.ms-excel,
                </param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack" /> 
            <result name="success" type="json">
                <param name="contentType">text/html</param><!--在這裏聲明返回的類型是text/html,而不是文件流-->
                <param name="root">all_result_list</param>
            </result>
        </action>

至此,這個Ext 使用FileUploadField 上傳文件 Uncaught SyntaxError: Unexpected token < 上傳文件的問題算是徹底解決了。希望本文能幫助到遇到同樣問題的朋友。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章