javascript – ExtJS解码方法无法解码“文件上传后”

我将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": "&quot;", <<< 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 &quot; get decoded back to " (sign)
                        }
                    }

                    r.responseXML = doc.XMLDocument || doc;
                }
            }
            catch(e) {}

            ...
    }

这个问题是否有一个很好的解决方法.似乎浏览器自动解码值????任何人????这是一个重大问题!!

解决方法:

这是我如何解决它.

问题是所有浏览器都会自动解码& QUOT;迹象.

所以我修复了Ext doFormUpload函数,如下所示:

  doFormUpload : function(o, ps, url){
    ...

        try{
            doc = frame.contentWindow.document || frame.contentDocument || WINDOW.frames[id].document;
            if(doc){
                if(doc.body){
                    if(doc.body.innerText){
                            r.responseText = doc.body.innerText;
                        }else{
                            r.responseText = doc.body.innerHTML.replace(/<pre>/ig,'').replace(/<\/pre>/ig,'');
                        }
                }

                r.responseXML = doc.XMLDocument || doc;
            }
        }
        catch(e) {}

        ...
}

此外,从现在开始,服务器返回的内容类型是“text / plain”
这可以防止浏览器解码数据.
我还从FF添加了一些不支持innerText属性的解决方法,但添加了包装响应的标记.

这对于ExJS框架来说是一个丑陋的黑客,但它对我有用.

希望有人会注意到这个问题,并对如何解决它有更好的想法.

相关文章

我有一个问题,我不知道如何解决.我有一个Indy10HTTP服务器.我...
我正在使用sdk1.17开发一个Firefox附加组件.它包含一个带有按...
Ext.define('PhysicsEvaluationSystemV1.view.base.Bas...
默认所有列(假设列3最大3列,动态显示),使用headerRowsEx中...
序言   1.ExtJs是一套很好的后台框架。现在很流行的,我们...
我在ExtJs中有这个表单.如果field1不为空,则field2不能为空....