为什么JSON.parse不起作用?

时间:2011-03-14 14:46:11

标签: javascript json

我将dataType设置为'text',因为我不想让Jquery自动解析我的JSON。 我的代码如下:

var membId = '5';
$('#submitNewDescription').live('click',function(){
    //An ajax request is made to update the DB
    $.ajax({
        url: '../../cgi-bin/qualification.py',
        type: 'POST',
        data: ({newDescription:$('#newDescription').val(),id:membId}),
        dataType: 'text',
        cache: 'false',
        success: function(data){
            json = JSON.parse(data);
            console.log(data);
            console.log(json);
        }
    });
});

它在两个console.log命令中返回字符串:{“error”:[“ORA-01031权限不足”]}。这意味着解析不起作用,因为它不返回JavaScript对象。 JSONLint对我说这是一个有效的JSON。

任何人都知道发生了什么事?

感谢

修改

我可以设置为'json',这不是问题。问题是JSON.parse和$ .parseJSON应该可以工作。由于它们不是,我将'dataType'更改为'json',但返回相同的字符串。我不知道发生了什么。

4 个答案:

答案 0 :(得分:7)

可能是因为您正在寻找$.parseJSON而已?此外,我 beieve jQuery将查看数据,并在将其传递给回调之前对其进行最佳猜测。所以,如果它看起来像JSON的机会是jQuery已经给你一个JavaScript对象,那么不能使用JSON.parse / $.parseJSON重新解析。

您也可以将dataType字段更改为'json',让jQuery为您执行此操作...

答案 1 :(得分:2)

dataType: 'text' 更改为dataType: "json",将JSON.parse更改为$.parseJSON

答案 2 :(得分:1)

所有浏览器中都不存在JSON库。您可能需要包含自己的http://developer.yahoo.com/yui/json/

或者像其他建议一样,使用jQuery。您可能还想声明json var json = ...

答案 3 :(得分:0)

就我而言,我按照以下方式开展工作:

  • 从服务器(servlet),我指定json作为响应的数据类型
  • 然后jquery调用已经将响应参数解析为JSON对象(所以我不需要运行$ .parseJSON)...谢谢https://stackoverflow.com/a/6465506/2162226

注意我可以: 直接在响应对象中访问json字段

$.ajax({
        type: "POST",
        url: baseUrl,
        dataType: "json",
        data: theData,
        success: function(response) {

                alert(' status = ' + response.status);
                processResponseJSON(response);
        },