【问题标题】:How do I interpret JSON if jQuery thinks it is receiving a JSONP request?如果 jQuery 认为它正在接收 JSONP 请求,我该如何解释 JSON?
【发布时间】:2012-11-08 00:19:25
【问题描述】:

我正在尝试从网站(特别是 Yummly)获取一些 API 数据,看起来当我尝试执行 JSONP 请求时收到 JSON 数据。这会导致“Uncaught SyntaxError: UnexpectedToken:”。

尝试这样做的代码是:

var keywords = $('#input-text').val();
var url = "http://www.yummly.com/api/recipesq="+keywords+"&_app_id=<snipped-app-id>&_app_key=<snipped-api-key>&";
 $.ajax({                                                                            
      type: 'GET',
       url: url,
       dataType: 'jsonp',
       //dataType: 'jsonp json'
       success: function() { console.log('Success!'); },
       error: function(data, data2) { console.log(data); },
       //jsonp: false,
       //jsonpCallback: 'recipeGet'                                          
  });
});

我尝试通过重载 dataType 从 JSONP 转换为 JSON,但这并没有产生与上述不同的结果。我也尝试过更改回调函数,但是当我收到语法错误时,它并没有转到该函数。当我不使用 JSONP 而只使用 JSON 时,我收到一个“XMLHttpRequest cannot load Origin is not allowed by Access-Control-Allow-Origin.”。

任何帮助将不胜感激,我已经为此苦苦挣扎了一段时间。

【问题讨论】:

  • 您获取数据的服务是否明确支持JSONP?如果他们不这样做,那么您就不能使用JSONP。如果它们也不支持 CORS 标头,那么您根本无法通过 AJAX 在其他域上使用此数据源。响应到底是什么样的?
  • @RPM 无济于事,因为原始响应文本在 JSONP 请求中不可用。
  • 进一步了解 Alex Wayne 所说,如果该站点仅提供 JSON,您可以向您自己的网络服务器发出正常的 Ajax 请求,然后让您的服务器端代码向其他站点发出请求并返回它的响应返回给浏览器。

标签: javascript jquery ajax json jsonp


【解决方案1】:

我是负责 Yummly API 的开发人员之一。

Yummly API 支持 JSONP(documentation 解释了如何)但是您的请求存在一些问题。

  1. API url 应该是

    http://api.yummly.com/v1/api/recipes(去掉http后面的空格)

  2. 应该有一个“?” /recipes 和 q 之间(q 是参数,/v1/api/recipes 是路径)

  3. 然后您可以像往常一样通过 JSONP 调用传递回调参数(如您在上面使用的带有 dataType: 'JSONP' 的 $.ajax 应该可以工作)

最后,你的 app_key 是秘密的。请不要在 Stack Overflow 等公共网站上发布。我已经撤销了,请到https://developer.yummly.com生成一个新的。

【讨论】:

  • 感谢您这么快回复!对 API 密钥感到抱歉,我急于尝试解决这个问题,我认为我不应该把它拿出来。看来我的问题是附加“api”。网址的后缀。感谢您的所有帮助!
  • 注册回答有关他正在开发的 API 的问题。大佬!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 2018-10-04
  • 2021-05-30
相关资源
最近更新 更多