【问题标题】:Converting AJAX return data to JSON将 AJAX 返回数据转换为 JSON
【发布时间】:2011-06-06 20:45:26
【问题描述】:

我正在尝试检索 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 对象。此调用必须同步完成,因为它会加载重要数据。

任何帮助将不胜感激。

【问题讨论】:

  • 如何从服务返回数据?响应类型是application/json吗?
  • 删除转换器块有什么不同吗?这:转换器:{“文本 json”:$.parseJSON()}。因为 dataType:"json" 应该这样做
  • 为什么要定义自己的转换器? JSON 编码已经内置,我认为您提供的转换器是错误的。
  • 我已经移除了转换器,并发布了更新的当前代码。
  • 那么你是如何从你的服务返回数据的呢?什么语言?您是否在响应中设置标题?等等等等等等?客户端上的一切看起来都不错,passcod 的小提琴看起来也不错 - 这告诉我你在服务端遇到了问题。

标签: jquery ajax json uncaught-exception


【解决方案1】:

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

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

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

【讨论】:

  • 我尝试将数据类型切换为文本(我将其设置为 json),但仍然收到错误消息。多么令人失望:(
  • @FélixSaparelli 您的链接对我非常有用。谢谢
  • 谢谢。你拯救了我的一天!
【解决方案2】:

为什么不使用$.getJson()

等价于

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

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

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

编辑

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

编辑 #2 也许这个问题会有所帮助: Is there a version of $getJSON that doesn't use a call back?

建议使用这个:

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

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

【讨论】:

  • 当我指定 async: false 时,使用 getJSON() 方法会出错。我试图用这些数据做的是将它存储在一个变量中,以便在成功调用之外使用。它通过 AJAX 调用同步发生,这一点至关重要。
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
  • 2016-09-16
  • 2019-05-31
  • 2011-09-16
  • 2017-10-22
相关资源
最近更新 更多