Angularjs http始终调用错误函数

Angularjs http始终调用错误函数,angularjs,Angularjs,这是我的代码片段。似乎一切都很好,但我不知道为什么,我总是得到错误警报。URL是100%工作的,它返回unicode格式的字符串数组 App.service('categoriesService', function($http) { this.getData = function(callbackFunc) { return $http.get('http://yuppi.com.ua/rest/categories.php?key=453sdfg3t').error(f

这是我的代码片段。似乎一切都很好,但我不知道为什么,我总是得到错误警报。URL是100%工作的,它返回unicode格式的字符串数组

App.service('categoriesService', function($http) {
    this.getData = function(callbackFunc) {
       return $http.get('http://yuppi.com.ua/rest/categories.php?key=453sdfg3t').error(function(data) { alert("error2");});
      }
});

[{"id":3,"name":"\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430","count":"4265"},{"id":6,"name":"\u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b \u0438 \u041d\u043e\u0443\u0442\u0431\u0443\u043a\u0438","count":"6424"},{"id":11,"name":"\u0422\u0435\u043b\u0435\u0444\u043e\u043d\u044b \u0438 \u041f\u043b\u0430\u043d\u0448\u0435\u0442\u044b","count":"4882"},{"id":5,"name":"\u0414\u043e\u043c \u0438 \u0441\u0430\u0434","count":"8008"},{"id":4,"name":"\u0424\u043e\u0442\u043e \u0438 \u0412\u0438\u0434\u0435\u043e","count":"7434"},{"id":2,"name":"\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442","count":"7440"},{"id":10,"name":"\u041d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u044c","count":"1891"},{"id":7,"name":"\u041c\u0443\u0437\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b","count":"6653"},{"id":8,"name":"\u0425\u043e\u0431\u0438, \u043e\u0442\u0434\u044b\u0445 \u0438 \u0441\u043f\u043e\u0440\u0442","count":"3597"},{"id":9,"name":"\u0422\u043e\u0432\u0430\u0440\u044b \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u0439","count":"7417"},{"id":12,"name":"\u0416\u0438\u0432\u043e\u0442\u043d\u044b\u0435","count":"3775"},{"id":13,"name":"\u041c\u043e\u0434\u0430 \u0438 \u0441\u0442\u0438\u043b\u044c","count":"5816"},{"id":14,"name":"\u0420\u0435\u043c\u043e\u043d\u0442 \u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e","count":"4516"}]

很明显,您正在点击错误函数,因为来自该URL的响应不包含CORS头,从而使您的浏览器能够在允许的情况下限定请求

你可以在这里看到小提琴:

您可以阅读跨域请求以更好地了解正在发生的事情。此外,要解决此类问题,最好对API进行更改以发送适当的头。可以暂时禁用特定于浏览器的CORS安全检查,但这不是解决方案

下面是测试代码

var app = angular.module("TestApp", []);

app.controller("TestCtrl", ["$http", "$scope", function($http, $scope) {
    $scope.msg = "Hello, world!";
    $http.get("http://yuppi.com.ua/rest/categories.php?key=453sdfg3t")
    .success(function (response) {
        console.log("RESPONSE", response);
    })
    .error(function (err, status, headers) {
        console.error("ERR", err, status);
    });
}]);

当您启动javascript控制台时,您将看到错误消息。

如果您有CORS问题,请将此头添加到php文件
头(“访问控制允许源代码:”)

我在尝试访问URL时收到404。既然您收到了错误,为什么不记录错误数据,以便准确了解您收到的错误。您是否尝试过在浏览器开发人员工具中查看?如果你使用的是chrome浏览器,点击该url和/或在“网络”面板中查看是否正在访问远程地址。当我尝试点击你的url时,我也会得到404。也许url有一些基于IP的访问控制机制,而您正在一个不受信任的主机中部署前端?我更改了URLso。。据我所知,如果我将我的资源(HTML、js文件)移动到同一台服务器上-我不会与CORS有任何问题?@user1315599您不需要在同一台机器上托管前端和后端-重要的是,在后端的响应中,发送正确的头,以便接收响应的浏览器知道服务器允许它从服务器接收数据。您可以将服务器上的头设置为*,这将允许从任何位置读取服务器的响应,也可以将其用于特定地址范围或特定地址本身。此地址将与前端所在的地址相同。目前,我使用的是godaddy提供程序,无法修改Apache的配置。我发现这个标题(“访问控制允许来源:”;应该有助于设置正确的标题。我相信您正在使用PHP服务请求?我认为将此添加到为该请求提供服务的PHP脚本中就足够了:
标题(“访问控制允许源代码:”
)。PHP的工作方式有点滑稽,所以有时您可能希望在向PHP的输出缓冲区写入任何内容之前添加该行,否则会抛出错误。我将该行添加到标题中,但仍然在控制台DomeException[NS_error_DOM_BAD_URI:“拒绝访问受限URI”代码:1012 nsresult:0x805303f4位置:file:///C:/Users/hffff/Desktop/Angular/js/vendor/angular.min.js:83]确保您正在本地主机上运行项目?