У меня есть результат в формате 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 отправляется в текстовом / 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) {}
...
}
Есть ли хороший обходной путь для этой проблемы. похоже, что браузер автоматически декодирует значение ???? кто-нибудь???? это серьезная проблема !!