请求在CURL中工作,但不在Ajax中工作
我有一个Scrapyd服务器正在运行并试图安排一个作业 当我在下面尝试使用CURL时,它正在工作请求在CURL中工作,但不在Ajax中工作,ajax,angularjs,curl,scrapyd,Ajax,Angularjs,Curl,Scrapyd,我有一个Scrapyd服务器正在运行并试图安排一个作业 当我在下面尝试使用CURL时,它正在工作 curl http://XXXXX:6800/schedule.json -d project=stackoverflow -d spider=careers.stackoverflow.com -d setting=DOWNLOAD_DELAY=2 -d arg1=val1 之后,我在angular中完成了一个小的代码UI,为它提供了一个GUI 我已经做了一个AJAX请求来完成上述工作 var
curl http://XXXXX:6800/schedule.json -d project=stackoverflow -d spider=careers.stackoverflow.com -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
之后,我在angular中完成了一个小的代码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!");
});
但是我得到的请求的资源上没有“访问控制允许源”标题。
错误
有谁能帮我解决这个问题吗
为什么它在CURL中工作,而在我的AJAX中不工作
谢谢,这是因为称为同源策略的浏览器保护。它可以防止跨方案、主机名和端口号的不同组合的ajax请求。Curl没有这样的保护 为了防止它,您必须将api和客户端应用程序放在同一个域和端口上,或者将CORS头“”添加到服务器
另一个选择是使用。在这种情况下,这可能适用于只获取json数据。它不适合RESTAPI。在这个方面,我无法控制Scrapyd(Twisted服务器)在客户端级别是否有我可以做的事情,您可以使用,但它可能不适合,因为它实际上只允许just-get请求。这对restapi不好。你为什么要发布到.json扩展名上。我想您应该执行get,这样JSONP就可以工作了。。我使用的是Scrapyd,所以在我的请求url中有.json