我有一台运行Scrapyd服务器并尝试安排工作。
当我在下面尝试使用CURL时,它正在运行
curl http://XXXXX:6800/schedule.json -d project=stackoverflow -d spider=careers.stackoverflow.com -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
之后我在角度上完成了一个小代码UI,为此设置了一个GUI,
我做了一个AJAX请求来执行上述操作。
var baseurl = GENERAL_CONFIG.WebApi_Base_URL[$scope.server];
var URI = baseurl +"schedule.json"; //http://XXXXX:6800/schedule.json
var headers = {'content-type': 'application/x-www-form-urlencoded'}
console.log(URI)
$http.post( URI,data = $scope.Filters, headers).success(function (data, status) {
console.log(data)
}).error(function (data, status) {
console.log(status);
alert("AJAX failed!");
});
但我收到No 'Access-Control-Allow-Origin' header is present on the requested resource.
错误。
任何人都可以帮我解决这个问题吗?
为什么它在CURL中工作而在我的AJAX中工作。
谢谢,
答案 0 :(得分:0)
这是因为浏览器保护称为同源策略。它可以防止跨方案,主机名和端口号的不同组合的Ajax请求。 Curl没有这样的保护。
为了防止这种情况,您必须将api和客户端应用程序放在同一个域和端口上,或者添加CORS标头' Access-Control-Allow-Origin'到服务器。
另一个选择是使用JSONP。在这种情况下,这可能适合于获取json数据。它不适合休息api。在角度使用中$http.jsonp用于此