Я не понимаю, почему тест в функции jQuery parseJSON:
/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
.replace(/(?:^|:|,)(?:\s*\[)+/g, ""))
возвращает false
для строки: {"TermTitle":"some Title"}
Тест в http://www.jsonlint.com/ говорит мнечто строка {"TermTitle":"some Title"}
является допустимой JSON, но когда я пытаюсь передать ее в $.parseJSON(opData)
, функция parseJSON
завершается ошибкой ...
Я также протестировал только эту функцию /^[\],:{}\s]*$/.test...
отдельно в Firebug с указанной строкой.
[править] Хорошо, код:
var json = '{"TermTitle":"some Title"}';
var obj = $.parseJSON(json);
alert('obj = ' + obj + ' and obj.TermTitle = ' + obj.TermTitle);
работает и для меня.
Но в моем случае, когда у меня есть следующее в моем JavaScript:
function GetTerm($iInd) {
$.ajax({
type: "POST",
url: "get_term.php",
data: {
id: $iInd
},
success: function(data){
ProcessFetchedTerm(data);
}
});
//If I tried adding dataType: "json" then it would stop working at all.
}
function ProcessFetchedTerm(opData) {
alert ("In ProcessFetchedTerm, data: '" + opData + "'");
alert ("typeof opData: " + typeof opData);
alert ("Replacement result of the regex function: " +
opData.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").
replace(/(?:^|:|,)(?:\s*\[)+/g, ''));
alert ("Result of the regex function: " +
/^[\],:{}\s]*$/.
test(opData.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").
replace(/(?:^|:|,)(?:\s*\[)+/g, '')));
var oTerm = $.parseJSON(opData);
alert('oTerm = ' + oTerm + ' and oTerm.TermTitle = ' + oTerm.TermTitle);
}
и в get_term.php
у меня есть:
echo json_encode(
array(
"TermTitle"=>"some Title"
)
);
Возврат оповещений:
In ProcessFetchedTerm, data: '{"TermTitle":"some Title"}'
typeof opData: string
Replacement result of the regex function: {]:]}
Result of the regex function: false
Последнее предупреждение не отображается
[править 2]
Я переписал начало своей функции ProcessFetchedTerm
на
function ProcessFetchedTerm(opData) {
var json = '{"TermTitle":"some Title"}';
alert ("In ProcessFetchedTerm, opData: '" + opData + "' json: '" + json + "'");
var oTerm = $.parseJSON(json);
, предупреждение выдает:
In ProcessFetchedTerm, opData: '{"TermTitle":"some Title"}' json: '{"TermTitle":"some Title"}'
Таким образом, строки равны, и если следующая строкаvar oTerm = $.parseJSON(json);
это работает, но если следующая строка var oTerm = $.parseJSON(opData);
, это не работает.
Так что же может быть скрыто внутри (предположительно) строкового объекта opData
, что мешает ему работать?