cakephp3でajaxとcontroller間でのデータやり取りがうまくいきません
タイトルの件について、
ローカル環境(vagrant使用)で正常に動作していた
ajax→controller→ajaxのデータ通信が、レンタルサーバー(xserver)に
uploadしたところ処理がvagrantと違った挙動になってしまい、
原因が分からず詰まってしまいました。
そこで、現在の処理のソースを記載しますので、
間違っている点や原因をご教示いただけると幸いです。
【確認できていること】
・ajax→controllerへは通信できている。
・controller→ajaxへの通信も通っている。
・ajax側のsuccessに処理は流れるが、
responseに入っている値が以下のような呼び出しページのhtml全てを吐き出している。
response = "<meta charset="utf-8"/><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script><script src="/fourps/js/moment.js">.....以下略
【やりたいこと】
ajaxで送信したデータを元にcontoller側で処理して、
controller側で取得したデータをajaxに返してあげる。
ajax処理一部抜粋
function loginUser(){
var user_name = $('#name').val();
var password = $('#pass').val();
$.ajax({
type:'post',
url:'users/login',
data: {userName:user_name,
passWord:password},
contentType: 'application/json',
success:function(response) {
var contest_list = response['contest_list'];
var photo_list = response['photo_list'];
var vote_end_list = response['vote_end_list'];....以下略
※ここのresponseに呼び出しページのhtml全て入ってしまっている。とりたい値は入っていない。
controller処理一部抜粋
public function login(){
if ($this->request->is('ajax')) {
$this->autoRender = FALSE;
$session = $this->request->getSession();
$user_name = $this->request->getData(['userName']);
$pass_word = $this->request->getData(['passWord']);
//TODO::cakeのauth使う
$collation = $this->Users->find()
->where(['user_name' => $user_name])
->andWhere(['password' => $pass_word])
->count();
if ($collation == 1) {
//セッションにユーザ情報保存
$getUserInfo = $this->usersTable->existUser($user_name, $pass_word);
$session->write(
['user_name' => $user_name,
'auth' => $getUserInfo[0]['auth'],
'id' => $getUserInfo[0]['id']]
);
//login後のcontest詳細用データ取得
try {
//表示コンテスト名・開催中コンテスト参加写真取得
list($contest_info_list,$added_photo_list,$vote_end_no_list) = $this->usersTable->getDisplayContest($session->read('id'));
//表示するコンテストがない場合の処理
if($contest_info_list == 1){
}
}catch(Exception $e){
echo $e->getMessage();
}
$this->response->body(json_encode(
['user_name'=>$session->read('user_name'),
'auth'=>$session->read('auth'),
'contest_list'=>$contest_info_list,
'photo_list'=>$added_photo_list,
'vote_end_list'=>$vote_end_no_list
]
));
}else{
$this->redirect('/users');
}
}
}
以上の処理で、ローカル環境であれば想定通りの処理(ajax側のresponseにcontroller側で指定した連想配列が渡る)がされていましたが、レンタルサーバーに公開したところ、
responseに違った値が入るようになってしまいました。
お手数ですが原因などお分かりになられる方がおられましたら、
ご教示いただければと思います。
また、情報に不足がありましたらご指摘ください。
追記させていただきます。
以上、よろしくお願いいたします。
******************2019-02-18追記*********************
logs下にerror.log内容
2019-02-18 23:11:03 Warning: Warning (512): Unable to emit headers. Headers sent in file=/home/homeディレクトリ名/サーバ名/public_html/project名/vendor/cakephp/cakephp/src/Error/Debugger.php line=853 in [/home/homeディレクトリ名/サーバ名/public_html/project名/vendor/cakephp/cakephp/src/Http/ResponseEmitter.php, line 48]
Request URL: /users/login
Referer URL: https://サーバ名/project名/users
Client IP: IPアドレス
Trace:
Cake\Error\BaseErrorHandler::handleError() - CORE/src/Error/BaseErrorHandler.php, line 159
Cake\Http\ResponseEmitter::emit() - CORE/src/Http/ResponseEmitter.php, line 48
Cake\Http\Server::emit() - CORE/src/Http/Server.php, line 141
[main] - ROOT/webroot/index.php, line 40
2019-02-18 23:11:03 Warning: Warning (2): Cannot modify header information - headers already sent by (output started at /home/homeディレクトリ名/サーバ名/public_html/project名/vendor/cakephp/cakephp/src/Error/Debugger.php:853) in [/home/homeディレクトリ名/サーバ名/public_html/project名/vendor/cakephp/cakephp/src/Http/ResponseEmitter.php, line 148]
Request URL: /users/login
Referer URL: https://サーバ名/project名/users
Client IP: IPアドレス
Trace:
Cake\Error\BaseErrorHandler::handleError() - CORE/src/Error/BaseErrorHandler.php, line 159
header - [internal], line ??
Cake\Http\ResponseEmitter::emitStatusLine() - CORE/src/Http/ResponseEmitter.php, line 148
Cake\Http\ResponseEmitter::emit() - CORE/src/Http/ResponseEmitter.php, line 54
Cake\Http\Server::emit() - CORE/src/Http/Server.php, line 141
[main] - ROOT/webroot/index.php, line 40
2019-02-18 23:11:03 Warning: Warning (2): Cannot modify header information - headers already sent by (output started at /home/homeディレクトリ名/サーバ名/public_html/project名/vendor/cakephp/cakephp/src/Error/Debugger.php:853) in [/home/homeディレクトリ名/サーバ名/public_html/project名/vendor/cakephp/cakephp/src/Http/ResponseEmitter.php, line 181]
Request URL: /users/login
Referer URL: https://サーバ名/project名/users
Client IP: IPアドレス
Trace:
Cake\Error\BaseErrorHandler::handleError() - CORE/src/Error/BaseErrorHandler.php, line 159
header - [internal], line ??
Cake\Http\ResponseEmitter::emitHeaders() - CORE/src/Http/ResponseEmitter.php, line 181
Cake\Http\ResponseEmitter::emit() - CORE/src/Http/ResponseEmitter.php, line 55
Cake\Http\Server::emit() - CORE/src/Http/Server.php, line 141
[main] - ROOT/webroot/index.php, line 40
2019-02-18 23:11:03 Warning: Warning (2): Cannot modify header information - headers already sent by (output started at /home/homeディレクトリ名/サーバ名/public_html/project名/vendor/cakephp/cakephp/src/Error/Debugger.php:853) in [/home/homeディレクトリ名/サーバ名/public_html/project名/vendor/cakephp/cakephp/src/Http/ResponseEmitter.php, line 181]
Request URL: /users/login
Referer URL: https://サーバ名/project名/users
Client IP: IPアドレス
Trace:
Cake\Error\BaseErrorHandler::handleError() - CORE/src/Error/BaseErrorHandler.php, line 159
header - [internal], line ??
Cake\Http\ResponseEmitter::emitHeaders() - CORE/src/Http/ResponseEmitter.php, line 181
Cake\Http\ResponseEmitter::emit() - CORE/src/Http/ResponseEmitter.php, line 55
Cake\Http\Server::emit() - CORE/src/Http/Server.php, line 141
[main] - ROOT/webroot/index.php, line 40