AngularJS获得响应但与CakePHP出错

时间:2014-10-11 04:19:09

标签: javascript json angularjs cakephp

我正在尝试将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();
  1. 如何进行异常处理以了解哪种错误?
  2. 如何检查服务器或服务器的响应是否已关闭?
  3.  3。

    我的请求标题是..

    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。

2 个答案:

答案 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");
    });

如果您需要实现跨域请尝试以下方法:)

$http#jsonp

答案 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调用状态的更多详细信息以及错误消息。