0

我正在尝试解析作为 json 字符串的字符串的响应。在我的网络应用程序的另一个页面中,以下代码运行良好。但它不适用于我正在使用的当前页面。以下是代码:

 $.ajax({
    type: 'POST',
    url: 'http://mywebapp.com/sendnames',
    data: {},
    success: function(result) {
        alert('result: '+result);
        var obj = jQuery.parseJSON(result);
        alert('obj: '+obj);

    // doing rest of stuff  
    }

});

第一个警报出现并显示正确的结果。结果是:

 [
   "Richard",
   "Eric",
   "John"
 ]

但第二次警报没有出现。我检查了它,它是一个有效的 json。为什么我不能用 jQuery.parseJSON() 解析这个 json。提前致谢。

4

4 回答 4

2

尝试添加返回类型: dataType : json

$.ajax({
        type: 'POST',
        url: 'http://mywebapp.com/sendnames',
        data: {},
        dataType:'json',
        success: function(result) {
          console.log('result: '+result);        
        // doing rest of stuff  
        }

    });

“json”:
将响应评估为 JSON 并返回一个 JavaScript 对象。在 jQuery 1.4 中,JSON 数据以严格的方式解析;任何格式错误的 JSON 都会被拒绝并引发解析错误。(有关正确的 JSON 格式的更多信息,请参阅 json.org。) “jsonp”:使用 JSONP 加载到 JSON 块中。添加一个额外的“?callback =?” 到 URL 的末尾以指定回调。通过将查询字符串参数“_=[TIMESTAMP]”附加到 URL 来禁用缓存,除非缓存选项设置为 true。 http://api.jquery.com/jQuery.ajax/

于 2012-08-31T08:28:31.070 回答
1

替换$.ajax$.getJSON。这保证会在$.parseJSON内部触发,因此result已经是所需的 JS 对象。

$.getJSON({
   type: 'POST',
   url: 'http://mywebapp.com/sendnames',
   data: {},
   success: function(obj) {
      alert('obj: '+obj);
      // doing rest of stuff  
   }
});
于 2012-08-31T08:32:06.040 回答
0

尝试添加dataType:'text',它将返回字符串作为结果。并且您的代码将按您的预期运行。

于 2012-08-31T08:36:30.193 回答
0

在此处查看接受的答案

你正在解析一个对象。你解析字符串,而不是对象;jQuery.parseJSON 只接受字符串。

因为$.ajax已经解析了数据,result所以是 Javascript 对象而不是字符串。parseJSON需要一个字符串参数。

FROM DOCS(更多关于.ajax()数据类型的信息):

json 类型将获取的数据文件解析为 JavaScript 对象,并将构造的对象作为结果数据返回。为此,它在浏览器支持时使用 jQuery.parseJSON();否则它使用 Function 构造函数

.

于 2012-08-31T08:39:26.917 回答