【问题标题】:Accessing JSON Object returned from PHP using Jquery Ajax使用 Jquery Ajax 访问从 PHP 返回的 JSON 对象
【发布时间】:2015-08-26 09:31:35
【问题描述】:

我无法访问从我的 AJAX JQUERY 调用返回的 JSON 数据。

AJAX 与查询一样正确执行。我得到了正确的数据返回;这由我 JSON_ENCODE 的两个数组组成。我需要能够独立访问两个数据集。

当你们看到代码时,这可能是有道理的:

**PHP** 

    $sql501 =  "SELECT member,COUNT(member) as cont from loggederrors WHERE err = '".$hello."' GROUP BY member ";


    $result50 =mysqli_query($con,$sql501);

    $count50=mysqli_num_rows($result50);
    $member = array();
    $count = array();
    while($row56 = mysqli_fetch_assoc($result50)) {
        array_push($member, $row56['member']);
        array_push($count, $row56['cont']);

    }
    echo JSON_encode($member);
    echo JSON_encode($count);

    ?>

$member$count 是数组,当它们返回并登录到我的 AJAX 成功函数时,它们看起来像这样:

["Missed Entry"]["1"]["Missed Entry","Overwrite"]["1","1"] 

数据的顺序正确,但似乎重复了,我理解这是因为我将每次迭代都推送到数组中。它是我得到的最接近的,因为顺序是正确的。我尝试构建一个关联数组并使用各种不同的 mysqli 输出,即 num_rows、fetch_assoc

以前使用 JSON 时,我从来没有遇到过问题并且有访问数据的密钥:

这里是 AJAX:

 $.ajax({url: 'getstaffresults.php',
         data:  {stafftosend:stafftosend },
         type: 'post',                   
         async: 'true',

         success: function(data){

            console.log(data);
         }
 });

我之前可以使用 data.keyIwant 访问单个密钥,但这并没有按预期出现。非常感谢任何帮助。

目标是访问这两个数组。如果有意义的话,我不需要访问数组中的值。

我尝试构建一个二维数组并对其进行编码,但我还是无法访问它。

我试过 JSON.stringyfy , JSON.parse

【问题讨论】:

  • 当你 console.log data 你得到["Missed Entry"]["1"]["Missed Entry","Overwrite"]["1","1"] ??因为那不是 json,只是一个可以解析为数组的字符串,你最好改变你的 php 以返回有效的 json
  • @atmd 我知道这是我的主要问题,如果我将它作为 JSON 我可以访问它,但它不会像我期望的那样从 JSON_encode 返回,我正在努力操纵它以使其表现得像我一样想要它。
  • 我认为保留字json_encode() 区分大小写。尝试将您的JSON_encode() 更改为小写字母。
  • 感谢@aldrin27,输出已更改为["Missed Entry","Overwrite"]["1","1"]。我就是无法访问它。
  • 为什么不简单地echo json_encode( array( 'members'=>$member, 'count'=>$count) );

标签: php jquery ajax json


【解决方案1】:

尝试将两个响应打包到一个数组中,并且只回显一个响应。

$sql501 =  "SELECT member,COUNT(member) as cont from loggederrors WHERE err = '".$hello."' GROUP BY member ";


$result50 =mysqli_query($con,$sql501);

$count50=mysqli_num_rows($result50);
$member = array();
$count = array();
while($row56 = mysqli_fetch_assoc($result50)) {
    array_push($member, $row56['member']);
    array_push($count, $row56['cont']);

}
$arrayResponse = array(
    'member'    => $member,
    'count'     => $count
);
echo JSON_encode($arrayResponse);
?>

我只是建议这样做,因为我不确定 javascript 是否会并排解析为 json 字符串?

【讨论】:

    【解决方案2】:

    创建一个合理的 PHP 数据结构,然后将其转换为 json

    您不需要 2 个数组来获取信息。此外,如果您回显 2 响应,则可能是第二个将丢失在以太中。

    所以试试这个,创建一个数组数组来返回 javascript 代码,这样可以很容易地在这里和在 javascript 中处理它们。

    $sql501 =  "SELECT member,COUNT(member) as cont 
                from loggederrors 
                WHERE err = '".$hello."' 
                GROUP BY member ";
    
    $result50 =mysqli_query($con,$sql501);
    
    $count50=mysqli_num_rows($result50);
    $member = array();
    
    while($row56 = mysqli_fetch_assoc($result50)) {
        $member[] = array('member' => $row56['member'], 
                          'cont'  => $row56['cont']);
    }
    echo JSON_encode($member);
    ?>
    

    其实你可以进一步简化这个

    $sql501 =  "SELECT member,COUNT(member) as cont 
                from loggederrors 
                WHERE err = '".$hello."' 
                GROUP BY member ";
    
    $result50 =mysqli_query($con,$sql501);
    
    $count50=mysqli_num_rows($result50);
    $member = array();
    
    while($row56 = mysqli_fetch_assoc($result50)) {
        $member[] = $row56;
    }
    echo JSON_encode($member);
    ?>
    

    现在更改 javascript 以添加 dataType: 'json', 属性

     $.ajax({url: 'getstaffresults.php',
             data:  {stafftosend:stafftosend },
             type: 'post',                   
             async: 'true',
             dataType: 'json',
             success: function(data){
    
                console.log(data);
             }
     });
    

    数据应该自动转换为javascipt数组

    【讨论】:

      【解决方案3】:

      在你的 php 中:

         echo json_encode(['member' => $member, 'count' => $count]);
      

      在javascript中:

           $.ajax({url: 'getstaffresults.php',
             data:  {stafftosend:stafftosend },
             type: 'post',                   
             async: 'true',
      
             success: function(data){
              var parsedData = JSON.parse(data);
              console.log(parsedData);
             }
           });
      

      【讨论】:

        猜你喜欢
        • 2012-01-28
        • 2013-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多