在传递变量时,我的ajax代码一切顺利,让我们说“hello world”但是当传递包含诸如“hello world http // www.facebook.com”的变量时,实际上会导致很多问题。
实际上它是我遇到问题的变量“new_textarea”。 澄清事情说,
var new_textarea = "hello world"; //successfully saves it to database
但
时var new_textarea = "http://www.facebook.com" // will lead to problems
这是我的ajax代码:
$.ajax({
url: '/learns/quickpostcomment/'+user_discussion_id+'/'+user_id+'/'+new_textarea+'/'+parent_id,
success: function(data){
}});
这是我的蛋糕:
public function quickpostcomment()
{
$post = $this->params['pass'];
$this->ClassroomComment->create();
$this->ClassroomComment->set('classroom_id', $post[0]);
$this->ClassroomComment->set('user_id', $post[1]);
$this->ClassroomComment->set('comment', $post[2]);
$this->ClassroomComment->set('parent_id', $post[3]);
$this->ClassroomComment->save();
die;
}
到目前为止,我所检查的是,当变量包含url时,触发问题的是“/”或斜杠。
有什么方法可以将变量传递给包含斜杠或网址的ajax? 我非常需要帮助:(
答案 0 :(得分:2)
尝试在变量encodeURIComponent()
周围使用new_textarea
。有关使用encodeURI()
和encodeURIComponent
。
在quickpostcomment()
行动中,您可能需要使用$post[2]
上的urldecode()功能。我不记得蛋糕是否会自动为你做这件事,但我对此表示怀疑。
答案 1 :(得分:2)
我认为您应该使用Ajax而不是GET发送POST请求。如果您正确构建发布的数据,那么当您从标准Cake表单中获取数据时,您可以将事件置于操作中。
jQuery.ajax({
url : "<?php echo Router::url(array('controller' => 'learns', 'action' => 'quickpostcomment'), true); ?>,
type : "POST",
cache : false,
data : "data[ClassroomComment][user_discussion_id]=" + user_discussion_id + "&data[ClassroomComment][user_id]=" + user_id + "&data[ClassroomComment][new_textarea]=" + new_textarea + "&data[ClassroomComment][parent_id]=" + parent_id,
success : function(data){
}
};
随后在您的控制器中可以找到发布的数据:
$this->request->data['ClassroomComment']