【发布时间】:2012-01-24 15:42:56
【问题描述】:
我有一个 JSON 格式的结果发送回持有 $quot 符号的客户端。由于某些未知原因,代码中断了。
这是 ext-all-debug 的代码:
doDecode = function(json){
return eval("(" + json + ")"); FAILS HERE
},
这是我离开服务器时的 JSON(据我所知,我希望服务器不要在空闲时间花时间解码这个&quot。):
{
success: true,
total: 1,
results: [{
"ID": -1,
"Value": "POChangeRequestlblCustomerCatalogNumber",
"Description": "",
"Labels": {
"1": {
"ID": -1,
"LanguageID": 1,
"Value": "Catalog Number",
"ToolTip": "",
"LanguageName": "English",
"KeyID": -1,
"KeyValue": "POChangeRequestlblCustomerCatalogNumber",
"KeyDescription": ""
},
"2": {
"ID": -1,
"LanguageID": 2,
"Value": """, <<< THIS IS THE BAD PART!!!
"ToolTip": "",
"LanguageName": "Hebrew",
"KeyID": -1,
"KeyValue": "POChangeRequestlblCustomerCatalogNumber",
"KeyDescription": ""
}
},
"ServerComments": "1"
}]
}
此 JSON 以 text/html 内容类型发送,因为它是文件上传操作的结果。这可能是问题的一部分吗?
好的,我继续追查问题,发现ExtJS对隐藏iframe的返回值做了这个函数:
doFormUpload : function(o, ps, url){
...
try{
doc = frame.contentWindow.document || frame.contentDocument || WINDOW.frames[id].document;
if(doc){
if(doc.body){
if(/textarea/i.test((firstChild = doc.body.firstChild || {}).tagName)){
r.responseText = firstChild.value;
}else{
r.responseText = doc.body.innerHTML; << THIS IS WHERE MY " get decoded back to " (sign)
}
}
r.responseXML = doc.XMLDocument || doc;
}
}
catch(e) {}
...
}
这个问题有没有好的解决方法。好像浏览器会自动解码值???任何人????这是个大问题!!
【问题讨论】:
-
您的 JSON 有效。我会把这个贴在 Sencha.com 网站的 EXT 论坛上。这听起来像一个错误。
-
你能用 Firebug 之类的方式查看响应,以确保从服务器正确返回 JSON 字符串吗?
-
FWIW:JSON 无效。所有键都需要引用。使用
eval()时并不重要... -
此 JSON 以 text/html 内容类型发送,因为它是文件上传操作的结果。这可能是问题的一部分吗?
-
我无法在 Firebug 中查看响应,因为它在提交文件时由于某种原因没有显示。
标签: javascript extjs extjs3