每当我更改输入字段时,我都会调用此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文件中(Posts Controller的视图)。被调用的函数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;
}
我要做的是将selectImage div中的现有元素替换为新元素。问题是,ajax不断返回add.ctp文件的全部内容(调用请求的文件)。
这可能是什么原因以及如何解决?
修改:已解决
$这 - > Auth->允许(阵列( 'set_post_images'));没有设置,所以响应返回整个页面。在确定可以采取行动之后。
此外,在控制器中,变量不是通过$ url访问,而是通过$ this-> data ['url']访问。
快乐的编码!
答案 0 :(得分:1)
$这 - > Auth->允许(阵列( 'set_post_images'));没有设置,所以响应返回整个页面。在确定可以采取行动之后。
此外,在控制器中,变量不是通过$ url访问,而是通过$ this-> data ['url']访问。
快乐的编码!
答案 1 :(得分:0)
请尝试使用以下代码
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');
}
exit;
}
答案 2 :(得分:-1)
请将set_post_images的返回值插入id为“returned-images”的div,然后将ajax代码更改为
function submitData(inputstring){
$.ajax({
type: 'POST',
url: '/myWebsite/posts/set_post_images',
data: inputstring,
dataType: "text",
success:function(data){
var images = data.find('#returned-images');
var getResults=images.html();
$("#selectImage").html(getResults);
},
error:function(){
$('#selectImage').html("You failed misserably.");
},
timeout: 5000
});
}
干杯