【问题标题】:$http Cross Origin Request Blocked by Angular JS$http 跨域请求被 Angular JS 阻止
【发布时间】:2023-03-03 20:11:01
【问题描述】:

我正在尝试使用我们的建议 API“https://SuggestionsAPI.net/suggest?key=xyz”之一实现搜索建议,该 API 与 Ajax GET 请求配合良好,但是当我尝试将它与 Angular $http 服务一起使用时,它向我抛出错误是控制台:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote 
resource at https://SuggestionsAPI.net/suggest?key=xyz. This can be fixed by moving the 
resource to the same domain or enabling CORS.

我进一步尝试:

$httpProvider.defaults.headers.get = { 'Access-Control-Allow-Origin': '*' };
$httpProvider.defaults.headers.get = { 'Access-Control-Request-Headers': 'X-Requested-With, accept, content-type' };
$httpProvider.defaults.headers.get = { 'Access-Control-Allow-Methods': 'GET, POST' };
$httpProvider.defaults.headers.get = { 'dataType': 'jsonp' };

我一直在想为什么在使用 Angular JS 时浏览器会阻止相同的 GET 请求。请建议我消除它。

编辑:我的下一步 id 在函数内分配建议:

app.directive('autoComplete', ['AutoCompleteService', function (AutoCompleteService) {
return {
    restrict: 'A',
    link: function (scope, elem, attr, ctrl) {
        elem.autocomplete({
            source: function (searchTerm, response) {
                AutoCompleteService.search(searchTerm.term).then(function (autocompleteResults) {
                    response($.map(autocompleteResults, function (autocompleteResult) {
                        return {
                            label: autocompleteResult.JumboID,
                            value: autocompleteResult.JumboID
                        }
                    }))
                });
            },
            minLength: 3,
            select: function (event, selectedItem) {
                // Do something with the selected item, e.g. 
                scope.yourObject = selectedItem.item.value;
                scope.$apply();
                event.preventDefault();
            }
        });
    }
};

}]);

【问题讨论】:

  • 由于请求是跨域的。您的服务器应该配置有 CORS,或者应该能够处理来自客户端的 JSONP 请求。您没有详细了解服务器的实施。
  • @Chandermani CORS 问题已由 AB 的回答解决,但另一个错误是“未捕获语法错误:意外令牌:”,因为我可以看到我的 URL 被翻译为建议?query=8645&callback=angular .callbacks._1:1 ?任何想法如何从请求中删除“:”?

标签: javascript angularjs cors


【解决方案1】:

callback=JSON_CALLBACK 附加到您的网址,例如https://SuggestionsAPI.net/suggest?key=xyz&callback=JSON_CALLBACK

然后使用jsonp

$http.jsonp(url).
    success(function(data, status, headers, config) {
        //here
    }).
    error(function(data, status, headers, config) {
      //
    });

【讨论】:

  • jsonp 不需要 CORS 标头,它是一个脚本请求。也不是所有 API 都支持 jsonp
  • 得到了 "suggest?query=6654&subscription-key=ca67c22cba91492c85c58a8e7a825031&callback=angular.callbacks._0:1 Uncaught SyntaxError: Unexpected token " @A.B
  • 意外的令牌“:”,为什么请求被 _N:1 附加,请提出建议,因为我从 URL 得到正确的响应,但控制台仍然抛出错误!任何想法@A.B
  • 你登录到什么控制台,哪一行出现错误
  • {"@odata.context":"SuggestionsAPI.net/indexes('jumboindex')/…{"@search.text":"864485345","JumboID":"e3ef41a7f79e1f97b9a2e0fceb6ee2ce:80880b9b1d7261f24c4e1c341853ec4e"}," : “86406653”, “JumboID”: “cd13f897f315b8e3c8a792976b1f070e:80880b9b1d7261f24c4e1c341853ec4e”},{ “@ search.text”: “86408729”, “JumboID”: “716088e5555d737041b24e750d591c4c:80880b9b1d7261f24c4e1c341853ec4e”},{ “@ search.text”:“8640南River Parkway 坦佩亚利桑那州 85284","JumboID":"5d18fd8d570adc49b48012f2ba434bf3:80880b9b1d7261f24c4e1c341853ec4e"}]}
猜你喜欢
  • 1970-01-01
  • 2016-05-19
  • 2018-10-07
  • 2015-04-24
  • 2019-10-11
  • 2019-02-22
  • 2022-02-16
  • 2018-09-09
  • 2017-09-12
相关资源
最近更新 更多