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

时间:2015-01-10 10:47:48

标签: 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

之后我在角度上完成了一个小代码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中工作。

谢谢,

1 个答案:

答案 0 :(得分:0)

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

为了防止这种情况,您必须将api和客户端应用程序放在同一个域和端口上,或者添加CORS标头' Access-Control-Allow-Origin'到服务器。

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