我不明白为什么在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中隐藏着什么,使其无法工作?

最佳答案

运行此代码:

var json = '{"TermTitle":"some Title"}';
var obj = $.parseJSON(json);
alert('obj = ' + obj + ' and obj.TermTitle = ' + obj.TermTitle);


为我工作(使用jQuery 1.4)。该问题必须在代码的其他地方。 parseJSON方法失败时,您正在运行的确切代码是什么?

编辑(响应已发布的代码):
为什么要执行第三和第四警报的功能?我想这正在改变您的opData值。尝试在您的parseJSON呼叫之前添加第一个警报,然后查看它的内容。

关于javascript - jQuery parseJSON中的正则表达式测试返回false-为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2297186/

10-10 08:09