【问题标题】:AngularJS $http.get not working. Not retrieving dataAngularJS $http.get 不工作。不检索数据
【发布时间】:2014-12-27 03:00:17
【问题描述】:

我是 AngularJS 的新手,但我已经做了很多事情。 我做了一个 $http.post,效果很好。

这是 Angular 代码

$scope.login = function(user, pass) {
$scope.bIsVisible = false;

var dados = {"user": user, "pass": pass};
console.log(dados);

$http.post('http://base.corretoconcursos.com.br/cadernos/index.php/manageUsers/login', dados)
.success(function(data, status, headers, config) {
  if (data == false) 
  {
    $scope.isLogged = false;
    $scope.bIsVisible = true;
  } else {
    $scope.isLogged = true;
    $scope.userData = data;
    console.log(data);
  }
})
.error(function(data, status, headers, config) {
  alert('failed');
  $scope.bIsVisible = true;
});

还有ma​​nageUsers/login功能

function login()
{
    $postdata = file_get_contents("php://input");
    $data = json_decode($postdata);

    $username = $data->user;
    $password = md5($data->pass);

    $datafrombase = $this->UsersModel->getUser(array(
        'user' => $username,
        'pass' => $password
        ));

    if ($datafrombase != null) {
        $user = array(
                    'user' => $datafrombase['user'],
                    'type' => $datafrombase['type'],
                    'logged_in' => true
                    );
        $this->session->set_userdata($user);
    }

    if ($datafrombase != null)
        print_r(json_encode($datafrombase));
    else
        return false;
}

好的。它正在工作。我从数据库中检索一些数据并确定。真正的问题是,当我执行 $http.get 并且仅通过对数据库执行请求或不执行请求时,当我执行 console.log(数据),它向我展示了一个完整的 HTML 页面,实际上就是正在显示的页面。我得到一个 200 状态 OK,但是,一个 HTML 页面即将到来。不知道为什么。

这是 Angular 代码

$scope.setLoggedOn = function(on) {

if (on) {

    $http.get('http://base.corretoconcursos.com.br/cadernos/index.php/manageUsers/retrieveLogin')
      .success(function(data, status) {
          console.log(data);
      })
      .error(function(data, status, headers, config) {
        alert('failed');
      });
}
else
  $scope.isLogged = false;
};

这是我正在检索的 PHP 代码函数

function retrieveLogin()
{
    $user = null;

    $user = array(
        'user' => $this->session->userdata('user'),
        'type' => $this->session->userdata('type'),
        'logged_in' => true
        );

    print_r(json_encode($user));
}

我被困住了。我什至尝试在 php 函数中只做一个 'return true';return 'string'; 但没有任何效果。我做错了什么?

【问题讨论】:

    标签: php angularjs codeigniter angularjs-http


    【解决方案1】:

    $datafrombase 从未在 retrieveLogin() 中设置,因此 angular 不会收到任何东西。

    【讨论】:

    • 我修好了。对不起这是我的错。但问题是,即使我只是让 $user = 1 并以角度方式执行 print_r($user),console.log(data) 也会打印我的整个 HTML 页面,而不是数据。
    • 你不应该使用 print_r 将数据输出到角度,使用 echo
    • 已经试过了。这就是问题所在,即使我和另一个 $http.post 做同样的事情,就像第一个完美运行的函数一样,它也不起作用。它总是检索整个 HTML 代码页。
    • 它得到 HTTP 响应,它不模拟浏览器。确保将内容类型标头设置为 application/json
    【解决方案2】:

    想通了。如果您在会话中使用 CodeIgniter;并在构造函数中检查人们是否已登录以让他们看到该页面;当您执行 $http.get 时,它将运行构造函数并运行该条件,如果他们看不到该页面,即使您只是通过 AJAX 从该控制器发出请求,它也不会让您发出请求.

    我以为 $http.get 只会请求函数(即 verifyUserInDatabase();),并提供数据,但事实证明,它没有。

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多