0

Codeigniter と AngularJS を使用しています。メソッドとアクションを使用して送信するlogin.phpと、投稿データが Ci コントローラーによって正常に取得されます。しかし、角度を使用してフォームを送信しようとすると、壊れます。print_r を実行しても何も返されません。app.jsスクリプトは、Ci コントローラーに投稿されていないだけで、値を正常credに取得しています。何か案は?

login.php

<form ng-submit="login()">
  <fieldset>
    <legend>Login</legend>
    <label>Type your username and password</label>
    <input autofocus ng-model="cred.username" type="text" placeholder="Type your username" required><br>
    <input ng-model="cred.password" type="password" placeholder="Type your password" required><br>
    <button type="submit" class="btn">Submit</button>
  </fieldset>
</form>

app.js

app.factory("AuthenticationService", function($http, $location) {
    return {
        login: function(cred) {
            return $http({
                method : 'POST',
                url : 'index.php/home/login',
                data : cred
            });
        },
    };
});

app.controller('LoginController', function($scope, AuthenticationService) {
    $scope.cred = { username: "", password: ""};
    $scope.login = function() {
        AuthenticationService.login($scope.cred);
    };
});

CodeIgniter コントローラ

public function login() {
        $username = $this->input->post('username');
        $password = $this->input->post('password');
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $query = $this->db->get('users');
        print_r($_POST);
            if ($query->num_rows() > 0) {
                $row = $query->row();
                echo json_encode(array('isSuccessful' => true));
            } else {
                echo json_encode(array('flash' => 'Invalid username or password'));
            }
    }
4

2 に答える 2

4

おそらく、デフォルトで「リクエスト ペイロード」としてフォームを送信しているため、CodeIgniter が混乱する可能性があります。リクエストペイロードの代わりにフォームデータとしてデータを投稿するにはどうすればよいですか? をご覧ください。それを解決する方法について。

于 2013-08-31T00:05:38.033 に答える
1

おそらく、この問題を回避する最善の方法はkzar のソリューションです。これにより、リクエスト ペイロードの urlencoded 形式への変換が完全に透過的になります。

.config(['$httpProvider', function ($httpProvider) {
  // Intercept POST requests, convert to standard form encoding
  $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
  $httpProvider.defaults.transformRequest.unshift(function (data, headersGetter) {
    var key, result = [];

    if (typeof data === "string")
      return data;

    for (key in data) {
      if (data.hasOwnProperty(key))
        result.push(encodeURIComponent(key) + "=" + encodeURIComponent(data[key]));
    }
    return result.join("&");
  });
}]);
于 2015-11-23T14:08:39.753 に答える