我不明白为什么在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
函数失败...
我还使用上面提到的字符串在Firebug中单独测试了这个/^[\],:{}\s]*$/.test...
函数。
[编辑] 好的,代码:
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
中会阻止它工作吗?
答案 0 :(得分:1)
运行此代码:
var json = '{"TermTitle":"some Title"}';
var obj = $.parseJSON(json);
alert('obj = ' + obj + ' and obj.TermTitle = ' + obj.TermTitle);
适合我(使用jQuery 1.4)。问题必须在您的代码中的其他位置。当parseJSON方法失败时,您运行的确切代码是什么?
编辑(对已发布代码的回复):
你为什么要做第3和第4次警报的功能?我猜这会改变你的opData
值。尝试在parseJSON
来电之前添加您的第一个提醒,并查看其中的内容。
答案 1 :(得分:0)
它返回“false”,因为它不匹配。 “replace”调用将JSON字符串转换为“{]:]}',这与正则表达式不匹配。
[编辑]哦durrr是的它确实匹配;好吧,我不知道你的问题是什么。为什么你认为它返回“假”?