Jquery,读取从PHP接收的JSON变量

时间:2010-08-11 06:57:01

标签: php jquery ajax json cakephp

很抱歉,如果这是基本的,但我一直在处理整天搞清楚这一点,并且已经到了我可以用Jquery和cakephp完成所需的一切(不确定cakephp是否与此相关或者与任何PHP相同) ),我想从cakephp函数返回一个变量到jquery,我已经读过如何做到这一点,就像这里:

cakephp:

$test[ 'mytest'] = $test;
 echo json_encode($test);

和jquery:

$.ajax({
  type: 'POST',
  url: 'http://localhost/site1/utilities/ajax_component_call_handler',
  data: {
        component_function: component_function,
        param_array: param_array
        },
        dataType: "json",
  success: function(data) {
   // how do i get back the JSON variables? 
  }
});

我只是无法弄清楚如何在jquery中将一个或多个变量恢复为可用的形式,我只想要变量,所以我可以用它做任何其他事情,我一直在看我能通过搜索找到什么但它并没有让我完全清楚..感谢您的任何建议。

5 个答案:

答案 0 :(得分:2)

JSON变量位于data变量中。在你的情况下,它看起来像这样:

var data = {
    myTest: "Whatever you wrote here"
};

...所以你可以从data.myTest阅读。

(不确定它是否相关,但您可以从网址中删除http://localhost/部分; 无论如何,AJAX都不允许跨域请求。)

答案 1 :(得分:1)

您的变量在数据中。

$.ajax({
  type: 'POST',
  url: 'http://localhost/site1/utilities/ajax_component_call_handler',
  data: {
        component_function: component_function,
        param_array: param_array
        },
        dataType: "json",
  success: function(data) {
   // how do i get back the JSON variables? 
      var values = eval( data ); //if you 100 % trust to your sources.
  }
});

答案 2 :(得分:0)

基本上数据变量包含json字符串。要解析它并将其再次转换为JSON,您必须执行以下操作:

$.ajax({
  type: 'POST',
  url: 'http://localhost/site1/utilities/ajax_component_call_handler',
  data: {
        component_function: component_function,
        param_array: param_array
        },
        dataType: "json",
  success: function(data) {
   json = $.parseJSON(data);
   alert(json.mytest);
  }

我没有测试它,但它应该以这种方式工作。

答案 3 :(得分:0)

请注意,当您指定dataType“json”或使用$。getJSON(而不是$。ajax)时,jQuery会自动应用$。parseJSON

因此,在“success”回调中,您不需要再次使用parseJSON解析响应:

success: function(data) {
 alert(data.mytest);
}

答案 4 :(得分:0)

如果将JSON变量返回给视图文件,您可以使用javascript helper:

实用程序控制器中的

function ajax_component_call_handler() {
  $this->layout = 'ajax';
  if( $this->RequestHandler->isAjax()) {
       $foobar = array('Foo' => array('Bar'));
       $this->set('data', $foobar);
  } 
}

在您的视图/ utilities / ajax_component_call_handler.ctp中,您可以使用:

if( isset($data) ) {
   $javascript->object($data); //converts PHP var to JSON
}

所以,当你到达你的功能阶段时:

 success: function(data) {
   console.log(data); //it will be a JSON object.    
 }

在这种情况下,您将变量类型处理与控制器和视图逻辑分开(如果您需要其他东西,那么JSON会怎样)...