У меня есть результат формата JSON, отправленный обратно клиенту, который содержит знак $quot. по какой-то неизвестной причине код ломается.
Вот код, который блокируется из ext-all-debug:
doDecode = function(json){
return eval("(" + json + ")"); FAILS HERE
},
Вот мой JSON в том виде, в котором он был отправлен с сервера (насколько я знаю, я надеюсь, что сервер не будет тратить время на декодирование этого "в свободное время"):
{
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) {}
...
}
Есть ли хороший обходной путь для этой проблемы. кажется, что браузер автоматически расшифровывает значение???? кто угодно???? это главная проблема!!
eval()
... - person user123444555621   schedule 24.01.2012