【问题标题】:Jquery, reading JSON variables received from PHPJquery,读取从 PHP 接收的 JSON 变量
【发布时间】:2011-03-28 05:26:02
【问题描述】:

对不起,如果这是基本的,但我整天都在处理这个问题,并且已经到了可以用 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 中将一个或多个变量恢复为可用的形式,我只想要这个变量,这样我就可以用它做任何其他事情,我一直在寻找我可以通过搜索找到的东西但它并没有让我完全清楚..感谢您的任何建议。

【问题讨论】:

  • Álvaro G. Vicarios 的答案是正确的 - 但请注意,您使用的 PHP JSON 示例将返回 {"mytest": null} 因为您将空变量 $test 分配给数组 $test

标签: php jquery ajax json cakephp


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢.. 会尝试的.. 是的,一旦我退出测试阶段,删除域肯定是好的,因为域可以更改/用于不同的 url
【解决方案2】:

您的变量在数据中。

$.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.
  }
});

【讨论】:

  • 当你指定 dataType "json" 时,jQuery 会自动解析 JSON。所以没有必要 eval() 它。
【解决方案3】:

基本上数据变量包含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);
  }

我没有测试它,但它应该可以这样工作。

【讨论】:

    【解决方案4】:

    请注意,当您指定数据类型“json”或使用 $.getJSON(而不是 $.ajax)时,jQuery 将自动应用 $.parseJSON

    因此,在“成功”回调中,您无需再次使用 parseJSON 解析响应:

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

    【讨论】:

      【解决方案5】:

      如果返回 JSON 变量以查看文件,您可以使用 javascript 助手:

      在您的实用程序控制器中:

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

      在您的 view/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 之外的其他东西怎么办)...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 2012-08-08
        • 2012-08-02
        • 1970-01-01
        • 2013-07-28
        相关资源
        最近更新 更多