0

这是我视图的一部分(单击按钮时执行的 javascript 方法):

function assign()
{
    var links_list1 = [];
    var links1 = document.getElementById('moderatorUsers').getElementsByTagName('a');
    for(var a in links1) {
        if(typeof links1[a] == undefined) continue;
        links_list1.push(links1[a].innerHTML);} var str1 =links_list1.toString();
    var moderators = str1.split(',');

    var links_list2 = [];
    var links2 = document.getElementById('editorUsers').getElementsByTagName('a');
    for(var a in links2) {
        if(typeof links2[a] == undefined) continue;
        links_list2.push(links2[a].innerHTML);} var str2 =links_list2.toString();
    var editors = str2.split(',');

    var links_list3 = [];
    var links3 = document.getElementById('jEditorUsers').getElementsByTagName('a');
    for(var a in links3) {
        if(typeof links3[a] == undefined) continue;
        links_list3.push(links3[a].innerHTML);} var str3 =links_list3.toString();
    var jEditors = str3.split(',');             
}

这是我需要使用 javascript(版主、编辑、jEditors)中的 3 个数组调用的控制器方法:

  function insertPos($moderators,$editors,$jEditors){
        $account = new Account();
        $account->insertPos($moderators,$editors,$jEditors);
    }

我需要知道如何使用 javascript 方法中的 3 个数组执行控制器方法 insertPos($moderators,$editors,$jEditors) ...

我用它来发送 javascript 中的数组,就像你告诉我的那样:

$.post('http://localhost/cakephp/Accounts/insertPos', {
            data: {
                'moderators': moderators,
                'editors': editors,
                'jEditors': jEditors
            }
        });

在控制器中,我尝试像这样访问我的数组:

public function insertPos() {
        if (!empty($this->request->data)){
        print_r($this->request->data);
        $moderators = $this->request->data['moderators'];
        $editors = $this->request->data['editors'];
        $jEditors = $this->request->data['jEditors'];
        $account = new Account();
        $account->assignPos($moderators,$editors,$jEditors);
        }
    }

里面的部分if(!empty($this->request->data))永远不会被执行,这意味着数组还没有被发送到控制器......问题出在哪里?

谢谢你....

4

2 回答 2

0

看起来您正在尝试直接访问控制器类。这不是 CakePHP 的工作方式。您必须通过调度过程。请阅读:http ://book.cakephp.org/2.0/en/getting-started/a-typical-cakephp-request.html

也就是说,您将 POST 到 CakePHP url 的方式是:

// POST to the AccountsController's insertPos method
$.post('/accounts/insertPos');

要传递数据,请将其传递到datajQuery 指定的选项中,并以 'data' 为前缀,就像data[moderators]它最终在 Cake 的数据变量中一样。

$.post('/accounts/insertPos', {
  data: {
    'data[moderators]': moderators,
    'data[editors]': editors,
    'data[jEditors]': jEditors
  }
});

数据现在将$this->request->data在 Cake 中结束。

但是,查看您的insertPost()方法,您只是将它们作为参数传递,因此您可以像这样编写 ajax

// POST is unnecessary here, since you aren't POSTing data
$.get('/accounts/insertPos/'+moderators+'/'+editors+'/'+jEditors);

您可能需要stringify您的 JavaScript 数组并json_decode在您的inserPos方法中使用将它们转换为 PHP 对象,因为您不能只将数组从 JavaScript 传递给 PHP。

于 2012-04-23T14:21:33.940 回答
0

不要在数据参数中使用数组表示法;只需使用这样的键:

$.post('/accounts/insertPos', {
  data: {
    'moderators': moderators,
    'editors': editors,
    'jEditors': jEditors
  }
});

并在您的控制器中访问$this->request->data[key]$this->request->data->data[key]

在视图中,将您的分配功能替换为以下内容:

var moderators, editors, jEditors;

function assign()
{
    var links_list1 = [];
    var links1 = document.getElementById('moderatorUsers').getElementsByTagName('a');
    for(var a in links1) {
        if(typeof links1[a] == undefined) continue;
        links_list1.push(links1[a].innerHTML);} var str1 =links_list1.toString();
    moderators = str1.split(',');

    var links_list2 = [];
    var links2 = document.getElementById('editorUsers').getElementsByTagName('a');
    for(var a in links2) {
        if(typeof links2[a] == undefined) continue;
        links_list2.push(links2[a].innerHTML);} var str2 =links_list2.toString();
    editors = str2.split(',');

    var links_list3 = [];
    var links3 = document.getElementById('jEditorUsers').getElementsByTagName('a');
    for(var a in links3) {
        if(typeof links3[a] == undefined) continue;
        links_list3.push(links3[a].innerHTML);} var str3 =links_list3.toString();
    jEditors = str3.split(',');             
}

祝你好运

于 2012-04-24T12:15:39.403 回答