今天用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>