入力フィールドを変更するたびに呼び出されるこのajaxリクエストがあります。
$(document).ready(function(){
$('#PostTitle').change(function(){
var inputstring=$("#PostTitle").val();
submitData(inputstring);
});
});
function submitData(inputstring){
$.ajax({
type: 'POST',
url: '/myWebsite/posts/set_post_images',
data: inputstring,
dataType: "text",
success:function(data){
$("#selectImage").replaceWith($('#selectImage', $(data)));
},
error:function(){
$('#selectImage').html("You failed misserably.");
},
timeout: 5000
});
}
上記のコードは、add.ctpファイル(投稿コントローラーのビュー)にあります。呼び出された関数set_post_imagesは、Posts Controller自体にあり、次のようになります。
public function set_post_images($url = null) {
if($url!=null){
$this->set('imageArray', $this->getImages($url));
} else {
$this->set('imageArray', array("/img/someImage.png"));
}
if ($this->RequestHandler->isAjax()) {
$this->autoRender = false;
$this->layout = 'ajax';
$this->render('/elements/selectImageElement');
}
return;
}
私がやろうとしているのは、selectImagedivから既存の要素を新しい要素に置き換えることです。問題は、ajaxがadd.ctpファイル(リクエストの呼び出し元のファイル)の内容全体を返し続けることです。
これの原因は何であり、どうすれば修正できますか?
編集:解決済み
$ this-> Auth-> allow(array('set_post_images')); が設定されていなかったため、応答はページ全体を返していました。それを修正した後、アクションを話すことができます。
また、コントローラーでは、変数は$ urlを介してではなく、$ this->data['url']を介してアクセスされます。
ハッピーコーディング!