我更改了$ http>我的AngularJS应用程序中的URL参数来自
$http({ method:'POST',
url:'http://localhost/api/clients.php'
}).success(function(data,status,headers,config){
deferred.resolve(data);
}).error(function(data,status,headers,config){
deferred.reject(status);
});
到
$http({ method:'POST',
url: ConfigService.Urls.Clients
}).success(function(data,status,headers,config){
deferred.resolve(data);
}).error(function(data,status,headers,config){
deferred.reject(status);
});
其中ConfigService如下:
Urls: {},
loadUrls: function(){
Urls.Clients = 'http://localhost/api/clients.php';
}
当然我在通过.Resolve加载控制器之前调用loadUrls所以我100%确定Urls.Clients不为null。
在我做了这个改变后,我开始收到错误:
TypeError: Cannot read property 'protocol' of undefined
at urlIsSameOrigin (http://localhost/myapp/app/lib/angular/angular.js:13710:17)
at $http (http://localhost/myapp/app/lib/angular/angular.js:7508:23)
令人困惑的是,该应用程序工作正常,除了我得到的错误...有人可以告诉我我在这里做错了什么?以及如果应用程序已经正常工作而我收到此错误的原因。
答案 0 :(得分:2)
这显然是订单的问题。在第一次运行loadUrls
调用之后,$http
才会被调用。这可能是因为控制器不一定按照您期望的顺序加载 - 在运行其他控制器之前,您无法依靠路由提供程序打开并启动您的主控制器 - 这只取决于如何事情已经确定。鉴于您在此处提供的代码量,很难说出订单究竟出了什么问题。
请记住,您有一些可以解决此问题的一般选项:
loadUrls()
请求之前,请始终致电$http
。这不是优雅的,但它会解决问题$http
个来电换行并在该封装中调用loadUrls()
。这比前一个略好,因为如果您需要更改loadUrls()
或确保只调用一次,您可以在以后实现该逻辑。使用应用程序配置,该应用程序配置在应用程序加载时执行(请注意,并非所有资源都已初始化且不允许注入)。示例from the documentation:
angular.module('myModule', []).
config(function(injectables) {
// provider-injector
// This is an example of config block.
// You can have as many of these as you want.
// You can only inject Providers (not instances)
// into config blocks.
}).
您可以使用此块或运行块初始化您想要的内容
我确定还有其他选项,具体取决于代码的结构,但希望这至少可以帮助您入门。祝你好运!
答案 1 :(得分:-1)
我遇到了同样的问题,我通过改变它来修复它:
var logoutURL = URL + '/logout';
function sendLogoutHttp(){
return $http({
method: 'GET',
url: logoutURL,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
}
到这个
function sendLogoutHttp(){
var logoutURL = URL + '/logout';
return $http({
method: 'GET',
url: logoutURL,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
}