我有一个包含Google ADWords的HTML
页面,以及来自外部网址的ajax
来电,我想从网址获取json
个数据。
外部API
也是由我制作的。
API Controller
(在Laravel 5.2
中):
public function index()
{
$data = WeatherData::orderBy('created_at', 'DESC')->first();
return Response::json($data);
}
HTML ADWords代码:
$.ajax({
url: 'https://weather.mnsc.com/api/v1/data',
type: 'POST',
dataType: 'JSON',
cors: true,
success: function (data) {
console.log(data);
}
});
但我在Chrome中遇到错误:
XMLHttpRequest无法加载https://weather.mnsc.com/api/v1/data。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许原点'null'访问。响应的HTTP状态代码为500。
我需要在Laravel API中设置标头吗?
答案 0 :(得分:1)
您需要AJAX请求的crossDomain: true
属性,而不是正常的属性。另外,$.ajax()
没有cors
选项,所以我删除了它。有关所有可用选项,请参阅文档页面上的jQuery.ajax()
settings:
$.ajax({
url: 'https://weather.mnsc.com/api/v1/data',
type: 'POST',
dataType: 'JSON',
crossDomain: true,
success: function (data) {
console.log(data);
}
});
答案 1 :(得分:0)
在你的ajax调用之前加上这行代码。我必须始终设置此项以使跨域jquery ajax工作。
$.support.cors = true;
答案 2 :(得分:0)
好吧,我发现可能是什么问题。问题在于请求类型。
我在post
电话中从get
切换到ajax
,现在它似乎按预期工作了。
$.ajax({
url: 'https://weather.mnsc.com/api/v1/data',
type: 'GET',
dataType: 'JSON',
crossDomain: true,
success: function (data) {
console.log(data);
}
});
但这对我没有帮助,因为Google AdWords只需要发布请求...
我还怀疑这是Laravel API的一个问题,必须要设置一些内容才能使用post
个请求。
<强>更新强>
正如我所怀疑的,post
请求中的问题是Larvael's csrf token.
。我通过评论Kernel.php
中的行来做出解决方法。