请求在CURL中工作但不在Ajax中工作

问题描述 投票:0回答:1

我有一台运行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中工作。

谢谢,

ajax angularjs curl scrapyd
1个回答
0
投票

这是因为浏览器保护称为同源策略。它可以防止跨方案,主机名和端口号的不同组合的Ajax请求。 Curl没有这样的保护。

为了防止它,您要么必须将api和客户端应用程序放在同一个域和端口上,要么将CORS头“Access-Control-Allow-Origin”添加到服务器。

另一种选择是使用JSONP。在这种情况下,这可能适合于获取json数据。它不适合休息api。在角度使用$http.jsonp为此

© www.soinside.com 2019 - 2024. All rights reserved.