我正在尝试将angularjs与我在CakePHP中已构建的应用程序集成。当我尝试使用AngularJS从CakePHP获取请求时,我收到错误的响应。虽然如果我点击相同的网址,我将获得有效的json。我也试过在chrome中使用插件。但是AngularJS错误地认定了它。
我的AngularJS控制器代码。
var load = function () {
console.log('call load()...');
console.log($rootScope.appUrl + '/songs.json');
$http.get($rootScope.appUrl + '/songs.json')
.success(function (data, status, headers, config) {
$scope.posts = data;
alert("Here");
alert(JSON.stringify($scope.posts));
angular.copy($scope.posts, $scope.copy);
})
.error(function (data, status, headers, config) {
alert("Error");
console.log('DATA : ' + data);
console.log('Status : ' + status);
console.log('headers : ' + JSON.stringify(headers));
console.log('config : ' + JSON.stringify(config));
});
}
load();
我的请求标题是..
GET /demosite/songs.json HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: toolbarDisplay=hide
Connection: keep-alive
响应标头是......
HTTP/1.1 200 OK
Date: Sat, 11 Oct 2014 03:48:34 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.4
Set-Cookie: CAKEPHP=i07rme235ifh66gjq9htdutg21; expires=Sun, 12-Oct-2014 03:48:34 GMT; Max-Age=86400; path=/; HttpOnly
Content-Length: 8717
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
请帮忙。
当我在XHR Console firebug中检查我的请求时,它显示为OPTIONS而不是GET或POST。
答案 0 :(得分:1)
var url = $rootScope.appUrl+"/songs.json"+"?callback=JSON_CALLBACK";
$http.jsonp(url)
.success(function(data){
console.log("success");
})
.error(function(data){
console.log("error");
});
如果您需要实现跨域请尝试以下方法:)
答案 1 :(得分:0)
更好的ajax调用方法是在AngularJS中使用Promise API。
例如:
$scope.makeAjaxCall = function(url, data, successCallback) {
var promise = $http(request);
promise.success(function(data, status, header, config) {
successCallback(data);
});
promise.error(function(data, status, header, config) {
if (status === 404) {
} else if (status === 406) {
} else if (status === 408) {
} else {
// you can check for other statuses such as 500
}
});
};
通过这种方式,您可以了解有关HTTP调用状态的更多详细信息以及错误消息。