使用cakephp将包含url的变量传递给ajax会导致错误

时间:2012-11-15 15:21:52

标签: php ajax cakephp

在传递变量时,我的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? 我非常需要帮助:(

2 个答案:

答案 0 :(得分:2)

尝试在变量encodeURIComponent()周围使用new_textarea。有关使用encodeURI()encodeURIComponent

的详细信息,请参阅this answer

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']