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(moderators、editors、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

そうは言っても、CakePHPのURLにPOSTする方法は次のようになります。

// 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->dataCakeになります。

ただし、メソッドを見ると、insertPost()単にパラメーターとして渡すため、代わりにajaxを次のように記述します。

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

JavaScriptからPHPに配列を渡すことはできないためstringify、JavaScript配列を使用json_decodeし、メソッドでそれらをPHPオブジェクトに変換する必要があります。inserPos

于 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 に答える