【问题标题】:getJson with custom Flickr API call generates a parse-error带有自定义 Flickr API 调用的 getJson 生成解析错误
【发布时间】:2012-08-19 20:46:20
【问题描述】:

我昨晚大部分时间都在尝试针对 Flickr API 的 JQuery 中的“getJSON”方法。我设法查看了 JQuery 文档中的一些示例并设法使它们工作,但是从我的自定义 API 调用中读取 JSON 的尝试失败了。

片段:

这行得通:

  //JQuery Flickr example code - works!
  $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?&format=json",
  function(data) {
    $.each(data.items, function(i,item){
      alert(item.media.m);
      if ( i == 3 ) return false;
    });
  });

失败了!

  //Custom Flickr API Call - nothing?fail?
  $.getJSON("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=c258d8ae4c29bb74da198c6ac3874671&text=Mclaren&per_page=3&format=json&callback=?&nojsoncallback=1",
  function(data) {

    alert(data);


  }).error(function(jqXHR, textStatus, errorThrown) { alert(textStatus + errorThrown); });

第二个 API 调用是有效资源,它在浏览器/提琴手中工作,我可以看到 JSON 内容,但在我的 JS 代码中引发错误

"parsererrorError: jQuery18007627279118169099_1345796861535 was not called".

此时我陷入了困境,最终我的最终目标是处理返回的 JSON 并迭代嵌套数组中的每个“照片”对象,以便在迭代期间轻松访问它们的子属性,如下所示:

[照片实例].id

[照片实例].owner

[照片实例].secret 等等……

任何帮助将不胜感激。

参考:http://www.flickr.com/services/api/response.json.html

注意:所有 API 密钥都用于测试目的,很快就会被销毁。

【问题讨论】:

    标签: jquery ajax api getjson flickr


    【解决方案1】:

    来自Jquery documentation

    如果 URL 包含字符串“callback=?” (或类似的,定义为 服务器端 API),请求被视为 JSONP。见 有关更多详细信息,请讨论 $.ajax() 中的 jsonp 数据类型。

    由于您的 URL 包含 callback=?,jQuery getJSON 函数正在等待(动态指定的)回调调用,JSONP 样式。但是当您在 URL 中指定 nojsoncallback 时,服务器会发送您提供的文档中指定的标准 JSON 内容:

    如果您只想要原始 JSON,没有函数包装,请添加 为您的请求提供值为 1 的参数 nojsoncallback。

    从你的 URL 中删除 callback=?,你应该没问题。

    【讨论】:

    • 非常感谢!我删除了回调=?现在我有了对象并且可以遍历它们(data.photos.photo)。我以为 JSONP 总是用于跨域 ajax?我仍然很困惑你为什么想要回调=?在那里,为什么不直接检索所有数据并从那里开始呢?再次感谢你! :)
    • 如果服务器通过设置特殊标头接受它,您可以执行跨域 JSON(不是 JSONP)。见developer.mozilla.org/en-US/docs/HTTP_access_control。对于现代浏览器和服务器,我认为 JSONP 不再有意义,但这些标头很“新”。
    【解决方案2】:
    猜你喜欢
    • 2015-05-07
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2020-09-10
    相关资源
    最近更新 更多