0

传递变量时,我的 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){
}});

这是我的 cakephp:

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 时变量上的“/”或斜杠。

有什么方法可以将变量传递给包含斜杠或 url 的 ajax?我非常需要帮助:(

4

2 回答 2

2

尝试encodeURIComponent()在您的变量周围使用new_textarea。有关使用and的更多信息,请参阅此答案encodeURI()encodeURIComponent

在您的quickpostcomment()操作中,您可能需要使用urldecode()函数$post[2]。我不记得蛋糕是否会自动为您执行此操作,但我怀疑确实如此。

于 2012-11-15T15:28:02.260 回答
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']
于 2012-11-15T15:37:38.860 回答