2012-11-08 36 views
0

我有此AJAX请求正被称为: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在帖子控制器本身,看起来像这样:

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而是经由$这 - >数据[“URL”]访问。

快乐编码!

+0

使用浏览器的开发者工具来查看请求是什么样子。请求主体在这里似乎不重要,但URL可能很重要。我知道你已经在你的代码中设置了URL,但最好看看浏览器实际请求的位置。从那里,通过你的行动的逻辑。 isAjax()是真的吗?最近的Cake会有'$ this-> request-> is('ajax')'而不使用RequestHandler。最后,检查浏览器中的服务器响应。服务器是否返回整个'add.ctp'视图,还是你的'replaceWith'代码出错? –

+0

你好本。该请求看起来还好我: '请求URL:http://本地主机/走投无路/职位/ set_post_images 请求方法:POST 状态代码:200 OK' 请求头中包含这一点,这似乎也没关系: ' Host:localhost Origin:http:// localhost Referer:http:// localhost/CheckMates/posts/add' 我不知道如何验证控制器操作本身,因为调试根本不显示任何内容(在这种情况下可能是正常的?)。 响应是整个add.ctp,浏览器开发工具显示它是这样的,如果我输出带有alert(data)的数据,它将显示整个代码... – Cos

+0

哦,我用你的代码替换了RequestHandler在检查请求之前。 – Cos

回答

1

$这个 - > Auth- >允许(阵列( 'set_post_images'));没有设置,所以响应返回整个页面。在确定可以说出行动之后。

此外,在控制器中,可变不经由$ URL而是经由$这 - >数据[“URL”]访问。

快乐编码!

-1

请插入set_post_images的返回ID为 '返回图像' 一个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 
}); 

}

干杯

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; 
}