【发布时间】: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