0

我有这个 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 控制器的视图)中。调用的函数 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 文件(调用请求的文件)的全部内容。

这可能是什么原因,我该如何解决?

编辑已解决

$this->Auth->allow(array('set_post_images')); 没有设置,所以响应返回整个页面。修复后,可以对动作说话。

此外,在控制器中,变量不是通过 $url 而是通过 $this->data['url'] 访问的。

快乐编码!

4

3 回答 3

1

$this->Auth->allow(array('set_post_images')); 没有设置,所以响应返回整个页面。修复后,可以对动作说话。

此外,在控制器中,变量不是通过 $url 而是通过 $this->data['url'] 访问的。

快乐编码!

于 2012-11-09T10:28:47.350 回答
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;
}
于 2012-11-15T07:26:03.897 回答
-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
});

}

干杯

于 2012-11-09T00:31:29.913 回答