日期:2014-05-16  浏览次数:20504 次

解决Extjs3上传文件Chrome解析Json错误问题

今天用ExtJS 3.1 进行文件上传,参照的是它的ext-3.1.1\examples\form\file-upload.js 的例子。用的浏览器是Google的Chrome,发现一个BUG。

我的后台程序返回的json是下面的形式:

{"errors":"","success":true}	

?
浏览器始终报错,告诉我JSON的格式不正确。一直想不明白为什么。

我在Chrome浏览器里面看到返回前台的json就是{"errors":"","success":true},但是页面就是报错。我怀疑是Ext有问题。

我Debug了Ext的js,发现下面的代码有问题:ext-all.js

Ext.util.JSON = new (function(){
    var useHasOwn = !!{}.hasOwnProperty,
        isNative = function() {
            var useNative = null;

            return function() {
                if (useNative === null) {
                    useNative = Ext.USE_NATIVE_JSON && window.JSON && JSON.toString() == '[object JSON]';
                }
        
                return useNative;
            };
        }(),
        pad = function(n) {
            return n < 10 ? "0" + n : n;
        },
        doDecode = function(json){
        		// 这里有问题。我后台返回的是 {"errors":"","success":true}	
        		// 但这里的 json 里面的内容却是: "<pre style="word-wrap: break-word; white-space: pre-wrap;">{"errors":"","success":true}</pre>"
        		// 让我百思不得其解。我只好去网上找了一个哥们的代码来救急。Chrome下面是正确的,其他浏览器没测试。请大家注意。
            return eval("(" + json + ')');    
        },
       .... 

?

我在?http://www.oschina.net/code/snippet_590489_24448

找了个方法,放在自己的页面里面,就好用了。

这段代码是:

<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>

?

?

?

?