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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求在CURL中工作但不在Ajax中工作相关的知识,希望对你有一定的参考价值。

我有一台运行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请求。 Curl没有这样的保护。

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

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

以上是关于请求在CURL中工作但不在Ajax中工作的主要内容,如果未能解决你的问题,请参考以下文章

Android Geolocation在模拟器中工作但不在手机中工作

Web Api 2.0 在邮递员中工作但不在 HTML 页面中

ApnsPHP:在开发中工作但不在生产中的推送通知

CoreLocation 应用程序在模拟器中工作但不在设备上

地理定位离子在浏览器测试中工作但不在android上

Azure Notificationhub - PN 发送在沙盒中工作但不在生产中