私はこのスクリプトをビューに持っています:
<script type="text/javascript">
$(document).ready(function() {
$("#addbrand").click(function() {
$.ajax({
url : '../brands/add',
data : {
name : "test",
shortname : "tst"
},
dataType : 'json',
success : function(html, textStatus) {
alert('Success ' + textStatus + html);
},
error : function(xhr, textStatus, errorThrown) {
alert('An error occurred! ' + errorThrown);
}
});
});
});</script>
そして、コントローラーの追加には、次の行があります。
... else if($this->request->is('ajax')){
if ($this->Brand->save($this->request->query)) {
// How to send feedback!?
}else{
// How to send feedback!?
}
$this->autoRender = false;
exit();
}
addbrandをクリックすると、Ajax操作が正常に実行され、データベースに追加された行が表示されますが、エラーまたは成功メッセージをユーザーに送信する方法がわかりません。私はいくつかのチュートリアルを読みましたが、2.xですべてが変更されている間、それらのどれもcakephp2.0に関するものではありませんでした。JSONとXMLのビューも読んだことがありますが、残念ながら何も理解できませんでした。ステータスコードを送信する必要があります。ステータスがOKの場合は、文字列の配列(実際にはブランド名)を送信する必要があります。ステータスがOKでない場合は、操作が正常に完了しない理由を説明する文字列を送信する必要があります。誰かが私を助けてくれるなら、私は最も感謝するでしょう。ありがとう
アップデート:
コードを変更しました。CakeResponse()を使用しましたが、アクションは次のようになります。
if($this->RequestHandler->isAjax()){
if ($this->Brand->save($this->request->query)) {
return new CakeResponse(array('body'=> json_encode(array('val'=>'test ok')),'status'=>200));
}else{
return new CakeResponse(array('body'=> json_encode(array('val'=>'test not ok')),'status'=>500));
}
}
CakeResponseを使用すると、Jqueryで可能な応答をうまく処理できます。
$("#addbrand").click(function() {
$.ajax({
url : '../brands/add',
data : {
name : "test",
shortname : "tst"
},
dataType : 'json',
success : function(data) {
alert("The brand has been saved");
},
error : function(data) {
alert("Eorror occured");
},
complete : function(data) {
alert($.parseJSON(data.responseText).val);
}
});
});
すべてが機能しているように見え、クライアントとサーバー間でJSON形式でAjaxを介していくつかの変数を送信できますが、CakePHPでAjax応答を送信する標準的な方法かどうかを知る必要がありますか?これを行うための他の簡単な方法はありますか?