3

我正在尝试检索 JSON 对象中的数据(我已验证其格式正确)并将数据输出到 firebug 控制台。我使用 JSONLint (http://jsonlint.com/) 验证了 JSON,并且知道数据没有在 JSON 对象中返回,因为当我记录它时,它记录为文本而不是对象。当我查看 ajax 帖子时,有一个 JSON 选项卡,它显示了该对象,但由于某种原因我无法检索它。

我的ajax调用是

    $.ajax({
        url:'/coords/base',
        data: { type: obj.type, id: obj.id },
        dataType:'text',
        type:'get',
        async:false,
        success: function(data) {
            console.log(data);
        }
    });

我的返回数据如下所示:

    {   
        "1": {"name":"TEXT","coords":[        
            { "entry":3,"x":15,"y":15 }     
        ]}}

当我将 AJAX 调用设置为变量并添加 .responseText; 在调用结束时,我可以检索 AJAX 调用的明文返回。我以为我可以只使用 $.serialize() 或 $.parseJSON() 但随后出现错误“未捕获的异常:语法错误,无法识别的表达式”。

最终目标是从此 responseText 中检索内容并在我的文件中使用 JSON 对象。此调用必须同步完成,因为它会加载重要数据。

任何帮助将不胜感激。

4

2 回答 2

2

明确指示 jQuery 将响应视为文本:

$.ajax({
  // ...
  dataType: "text",
  // ...
});

然后,您将能够获取 JSON 字符串。但是,如果您打算在之后将其转换为 JS 值,让我阻止您:jQuery 可以自动为您完成。如果您指定dataTypeto "json",或者只是让 jQuery 进行智能猜测,则data传递给success:函数的参数将是解析后的 JSON 对象。

于 2011-06-06T20:53:28.987 回答
1

为什么不使用$.getJson()

这相当于

 $.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

然后您应该能够执行以下操作:

$.getJSON('file.json', function(data) {
$.each(data, function(i) {
       console.log(data[i]);
     });
    });

编辑

也许,我误解了这个问题。

编辑#2 也许这个问题会有所帮助: 是否有不使用回调的 $getJSON 版本?

这建议使用这个:

$.ajax({
    type: 'GET',
    url: 'whatever',
    dataType: 'json',
    success: function(data) { console.log(data);},
    data: {},
    async: false
});

当然,这看起来像你所拥有的,所以我觉得我需要退后一步重新分析问题。

于 2011-06-06T20:51:13.013 回答