2011-11-28 69 views
2

我一直坚持检索我发送的变量通过ajax POST函数。你能帮我吗?cakephp,jquery,.ajax()

我的jQuery代码:

$.ajaxSetup ({ 
     cache: false 
    }); 

var selected = new Array();  
$(document).ready(function() {  
    $('.value').click(function() {      
     if($(this).hasClass('strong')) 
     { 
      selected.splice(selected.indexOf(this.innerHTML), 1); 
      submitData(selected); 
      $(this).removeClass('strong'); 
     } 
     else 
     { 
      selected.push(this.innerHTML); 
      submitData(selected); 
      $(this).addClass('strong')       
     } 
    }); 
}); 

function submitData(arDat) { 
    var arrayData = {"param1" : JSON.stringify(arDat)}; 

    $.ajax({ 
     type: 'POST', 
     url: 'http://localhost.local/coconut/trunk/challenges/values',   
     data: arrayData, 
     dataType: 'json', 
     success: function(data){ 
      console.log(arrayData); 
     }, 
     error: function(message){ 
      alert(message); 
     } 
    }); 
} 

我CakePHP的控制器功能:

function values() { 
     if ($this->RequestHandler->isAjax()) { 
      $this->autoRender = false; 
      Configure::write('debug', 0); 
      $params = json_decode($_POST['param1']); 
      //$result = json_encode($params); 
      $this->set('submitValue', $params); 
     } else { 
      $this->redirect(array('controller' => 'challenges', 'action' => 'index')); 
     } 
    } 

而且在view.ctp文件:

<?php debug($submitValue); ?> 

但我得到以下错误: 注意(8):未定义变量:submitValue

在Firebug我看到这一点:

Parametersapplication/x-www-form-urlencoded 
param1 ["Business","Life","Health"] 
Source 
param1=%5B%22Business%22%2C%22Life%22%2C%22Health%22%5D 

有谁知道我做错了吗?

谢谢!

编辑:

多一点澄清我想要什么。我想用$这个 - >设置( 'submitValue',$ params)方法; (so $ submitValue)在另一个视图的其他地方。

+1

我最初的观察是,“json_decode()”不会像您期望的那样解码URI编码的字符串,但我可能在那里是错的。在这种情况下,JSON编码的字符串看起来像{“param1”:[“Business”,“Life”,“Health”]}。你发送给服务器的是一个URI编码字符串。 – jcolebrand

+0

您要发送给服务器的语言是什么? 和接收 – Sedz

+0

@ jcolebrand,我改变了“json_decode()”,以decodeURI没有变化:(。 – Arvind

回答

0

CakePHP函数isAjax()检查请求是否是原型Ajax请求。

你没有使用Prototype,你正在使用jQuery--所以推测它总是返回false,所以submitValue从不设置。