我不明白,爲什麼在jQuery的parseJSON功能測試:對於字符串在jQuery的parseJSON正則表達式測試返回false - 爲什麼?
/^[\],:{}\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"}'
所以字符串是相等的nd如果下一行是var oTerm = $.parseJSON(json);
它可以工作,但如果下一行是var oTerm = $.parseJSON(opData);
它不起作用。
那麼可以隱藏在這個(可能是)字符串對象opData
裏面,以防止它工作?
ProcessFetchedTerm輸出中的警報是什麼? – rosscj2533 2010-02-19 16:21:44
添加警報輸出到問題... – Priednis 2010-02-19 17:13:34
還有幾件事要嘗試:'alert(opData === json);'。我認爲這將不得不顯示虛假,因爲它們似乎不是平等的。另外,嘗試用'eval(opData)'替換'$ .parseJSON(opData);'。這應該做同樣的事情,如果它的工作,這將意味着這是一個問題與jQuery。 – rosscj2533 2010-02-19 19:23:05