2012-04-23 110 views
0

這是我的視圖的一部分(即上的按鈕點擊執行的JavaScript方法):傳遞數組從視圖到控制器的CakePHP

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(',');    
} 

這裏是控制器方法我需要

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

我需要知道如何執行控制方法insertPos使用3 AR($版主,編輯$,$ jEditors):使用3個數組從JavaScript的(主持人,編輯,jEditors)來調用在JavaScript方法射線...

我用它來發送陣列中的JavaScript像你告訴我:

​​

,並在控制器中我嘗試訪問我的數組是這樣的:

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))裏面的部分永遠不會執行,這意味着數組沒有被髮送到控制器....問題在哪裏?

謝謝....

+0

你到目前爲止發現和嘗試了什麼? – Dave 2012-04-23 13:09:29

回答

0

它看起來像你想直接訪問控制器類。這不是CakePHP的工作方式。你必須經過調度過程。請閱讀:http://book.cakephp.org/2.0/en/getting-started/a-typical-cakephp-request.html

這就是說,你將張貼到CakePHP的URL的方式正是如此:

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

來傳遞數據,如jQuery的規定,與「數據」爲前綴通過它在data選項,如data[moderators],所以它結束於Cake的數據變量。

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

的數據現在在蛋糕最終在$this->request->data

看着你insertPost()方法,但是,你將它們簡單地作爲參數,所以不是你會寫你的Ajax像這樣

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

你可能需要stringify你的JavaScript數組和使用json_decodeinserPos將它們轉換爲PHP對象的方法,因爲您不能將數組從JavaScript傳遞到PHP。

+0

我想使用後出於安全原因.... 我想這3個數組傳遞給控制器​​2天,但沒有什麼工作,我是新在此請誰能幫助我.. 我需要發送從視圖控制器使用POST和我這3點的陣列,也想知道如何控制訪問這些陣列.... – 2012-04-23 23:05:38

+0

@karimgoda我給你介紹如何使用POST指令......我添加了一個例子,使它更清楚。你的Cake方法目前並沒有使用它,你需要重新使用'$ this-> request-> data;'來代替。 – jeremyharris 2012-04-24 00:37:57

+0

我修改了帖子,請看看... – 2012-04-24 11:29:23

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(',');    
} 

好運

+0

我已經修改後,並沒有像你說的,但它不工作,你可以請大家在新的一看,並告訴我什麼是錯 – 2012-04-24 12:28:31

+0

在視圖中刪除的方括號只是使用普通的鍵名,然後再試一次.. – 2012-04-24 12:40:20

+0

而在控制器鍵名應引用像這樣$ this-> request-> data ['moderators'] ... – 2012-04-24 12:41:48

相關問題