javascript - AngularJS 和 Web API 中请求的资源上不存在 'Access-Control-Allow-Origin' header

标签 javascript angularjs json asp.net-mvc

我不知道我的代码有什么问题:

我的工厂代码

AddDealApp.factory('AddDealService', ['$http', function ($http) {

    delete $http.defaults.headers.common['X-Requested-With'];

    var fac = {};

    fac.GetPlaces = function (searchtext) {
        searchtext = searchtext.replace(" ", "+");
        var url = 'https://maps.googleapis.com/maps/api/place/textsearch/xml?query=' + searchtext + '&key=AIzaSyD-s3kxWqrVnBUkxCzkGb8vRy1dld3RSz4';

        var req = {
            method: 'get',
            url: url
        }

        var result = $http(req)
        return result
    }

    return fac;
}])

配置代码:

AddDealApp.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);

在我的 Web.config 文件中:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>

我做了一切努力来获取跨域数据,但它仍然显示相同的错误。

如果我请求 JSONP,那么数据就会到来,但从 url 收到的响应始终是 xml 格式。

更新: 现在我正在尝试使用 JSONP 获得同样的效果。正在接收数据,但仍然显示错误。 普朗克: https://plnkr.co/edit/2BILJy2wsBrWlMrgMurZ?p=preview

最佳答案

Angular $http 始终需要 JSON 数据而不是 xml。

如果您将 url 更改为 json,那么您将从 google 获得 json 响应而不是 xml:

var url = 'https://maps.googleapis.com/maps/api/place/textsearch/json?query=' + searchtext + '&key=AIzaSyD-s3kxWqrVnBUkxCzkGb8vRy1dld3RSz4';

但根据 Google 的说法,首选方法是使用他们的 JS 库。

我使用这个 Angular 库,它效果很好:https://github.com/kuhnza/angular-google-places-autocomplete

这是我的输入:

<input class="form-control form-group-sm" type="text"
           id="ga_search"
           g-places-autocomplete options="autocompleteOptions"
           ng-model="ga_search"/>

这是我的 Controller 功能

$scope.ga_search = "";
                var watch = $scope.$watch('ga_search.address_components', function () {
                    //console.log("Update address");
                    if (typeof($scope.ga_search.address_components) != "undefined") {
                        $scope.propdata.street_number = "";
                        $scope.propdata.street = "";
                        $scope.propdata.suburb_text = "";
                        $scope.propdata.town_text = "";
                        $scope.propdata.region_text = "";
                        $scope.propdata.country_text = "";
                        $scope.propdata.post_code = "";
                        angular.forEach($scope.ga_search.address_components, function (val, key) {
                            //console.log(val);
                            switch (val.types[0]) {
                                case "street_number" :
                                    $scope.propdata.street_number = val.long_name;
                                    break;
                                case "route" :
                                    $scope.propdata.street = val.long_name;
                                    break;
                                case "sublocality_level_1" :
                                    $scope.propdata.suburb_text = val.long_name;
                                    break;
                                case "administrative_area_level_2" :
                                    $scope.propdata.town_text = val.long_name;
                                    break;
                                case "administrative_area_level_1" :
                                    $scope.propdata.province_text = val.long_name;
                                    break;
                                case "country" :
                                    $scope.propdata.country_text = val.long_name;
                                    break;
                                case "postal_code" :
                                    $scope.propdata.post_code = val.long_name;
                                    break;
                            }
                        });
                    }
                });

关于javascript - AngularJS 和 Web API 中请求的资源上不存在 'Access-Control-Allow-Origin' header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37320554/

相关文章:

javascript - Angular JS ng-repeat 显示 JSON 数据

java - 在 java 中构建 JSON 字符串最快的方法是什么?

javascript - 如何仅定位具有特定文本的元素?

javascript - Jquery .click() 导致代码中断

javascript - 如何重新加载创建表的 JavaScript 函数

javascript - 无法找到 ="ng-binding"所指向的类

arrays - Go - 如何将编码的 json 对象附加到文件

javascript - 元素悬停时暂停功能

javascript - 单击按钮迭代图像

javascript - 为什么我们将 Angular 应用程序包装在函数中?