ControllerでAjaxのpostデータを確認できない。
alertで「通信失敗」が表示されるため、Controllerの$this->request->is('ajax')まで処理できているとは思います。
viewのアコーディオンが開いたとき、IDが***だったら処理されるようになっています。
js
1$(function() { 2 $('#******').on('shown.bs.collapse',function() { 3 4 $.ajax({ 5 url: "https://********/コントローラー名/faqLog", 6 type: "post", 7 dataType: "json", 8 beforeSend: function(xhr){ 9 xhr.setRequestHeader('X-CSRF-Token', $('[name="_csrfToken"]').val()); 10 }, 11 contentType: 'application/json', 12 data: {"id" : "situmon"}, 13 }).done(function(response) { 14 if (response.result === 'NG') { 15 alert('保存失敗'); 16 return false; 17 } 18 19 alert('保存成功'); 20 return true; 21 }).fail(function(XMLHttpRequest, textStatus, errorThrown) { 22 alert('\n通信失敗 \nXMLHttpRequest : ' + XMLHttpRequest.status + '\ntextStatus : ' + textStatus + '\nerrorThrown : ' + errorThrown.message +'\n'); 23 }); 24 }); 25
コントローラー
controller
1public function faqLog() 2 { 3 $this->autoRender = false; 4 if ($this->request->is('ajax')) { 5 6 //$id = $this->request; 7 $id = $this->request->getData(['id']); 8 $id = json_encode($id); 9 $this->log(debug($id)); 10 11 if ($id == null) { 12 $this->Flash->boot_error(__('データなし')); 13 return $this->getResponse()->withType('json')->withStringBody(json_encode(['result' => 'OK'])); 14 } 15 16 return $this->getResponse()->withType('json')->withStringBody(json_encode(['result' => 'NG'])); 17 } 18 } 19
補足、
・JSのdataType: "json"を消すとアラートで「保存成功」となるがデータは空。
file
XMLHttpRequest : 200
textStatus : parsererror
errorThrown : Unexpected token < in JSON at position 0
・$this->request で確認したところ
[stream:protected] => Zend\Diactoros\PhpInputStream Object
(
[cache:Zend\Diactoros\PhpInputStream:private] => situmon <-ここにいた!
[reachedEof:Zend\Diactoros\PhpInputStream:private] => 1
[resource:protected] => Resource id #5
[stream:protected] => php://input
)
回答2件
あなたの回答
tips
プレビュー