javascript - jquery 无法正确读取 PHP json_encode() 函数

标签 javascript php jquery ajax json

<分区>

我有以下问题,

我正在将一个 json_encoded 数据数组从 PHP 发送到 javascript。我从 PHP 接收到的实际 JSON 如下所示,

{
    "route": "1(M)A",
    "startSignal": "AN1",
    "startX": 100,
    "startY": 320,
    "direction": "down",
    "endSignal": "AN3",
    "endX": 1100,
    "endY": 320,
    "1AT": {
        "length": "100",
        "xStart": 100,
        "yStart": 320,
        "xFinish": 133.33333333333,
        "yFinish": 320
    },
    "1BT": {
        "length": "100",
        "xStart": 133.33333333333,
        "yStart": 320,
        "xFinish": 166.66666666667,
        "yFinish": 320
    },
    "1CT": {
        "length": "100",
        "xStart": 166.66666666667,
        "yStart": 320,
        "xFinish": 200,
        "yFinish": 320
    },
    "1DT": {
        "length": "100",
        "xStart": 200,
        "yStart": 320,
        "xFinish": 233.33333333333,
        "yFinish": 320
    }
}

在我的 .JS 文件中,我得到如下“echo json_encode($dataArray)”,

$.ajax({                              
    url: "visualiser/visualiser_RouteList.php",
    data: "JSON",
    async: false,
    success: function(data){
        console.log(data);
    } 
});

问题是由于某种原因,ajax 以下列方式读取 json..(JSON 中的每个字符都存储为数组元素..所以我无法检索关联名称的特定值,例如,获取“1(M)A” 来自关联名称“route”的字符串值..

data[0] = "{"
data[1] = " \" "
data[2] = "r" 
data[3] = "o" 

我哪里错了?

============================================= =============================

收到意见后进一步修改,

谢谢大家,我确实将数据更改为 'dataType = "json"' 但它仍然不起作用..我真的很想在执行 'console.log(数据)但没有打印出来所以我的 PHP 源代码中的 $array 一定有问题,不确定是否有人愿意看但我在这里发布我的 php 源代码..(很抱歉我是 PHP 的菜鸟..除了拔头发,我似乎什么也做不了)

============================================= ==============================

    <?php 
    // Route registration form processing php
    // accepts a serialized data from myRoute.js
    //header('Content-Type: application/json');
    include_once ("dbConnect.php");

    //$sql="SELECT * FROM route";

    $routeStarts = "SELECT id, idSignal, km, line_name, direction, route.type
                    FROM route
                    JOIN signals
                    ON startSignal = idSignal";

    $routeEnds = "SELECT id, idSignal, km, line_name, direction, route.type
                    FROM route
                    JOIN signals
                    ON endSignal = idSignal";

    $routeTracks = "SELECT idRoute, signalName, routeTrack.idTrack, length, firstTrack, pointTrack, prevTrack 
                    FROM routeTrack
                    JOIN track
                    ON routeTrack.idTrack = track.idTrack";
                    /*ORDER BY idRoute";*/      
    $pointTracks = "SELECT idRoute, routeTrack.idTrack, aLocation, bLocation, aLine, bLine, aTrack, bTrack, type 
                    FROM routeTrack
                    JOIN points
                    ON routeTrack.idTrack = aTrack";                                        


    $sqlMax = "SELECT MAX(km) FROM signals";
    $sqlMin = "SELECT MIN(km) FROM signals";

    $max = mysqli_query($con, $sqlMax);
    $min = mysqli_query($con, $sqlMin);
    $start = mysqli_query($con, $routeStarts);


    $rowMax = mysqli_fetch_array($max);
    $rowMin = mysqli_fetch_array($min); 
    $range = $rowMax[0] - $rowMin[0];

    // For each route picks up the start signal
    while($row1 = mysqli_fetch_array($start)){
        $resultArray = array();

        $routeName = $row1['id'];
        $startSig = $row1['idSignal'];
        $startX = ((($row1['km'] - $rowMin[0]) / $range)*1000)+100;
        $startY = getYcoordinate($row1['line_name']);
        $direction = $row1['direction'];

        $resultArray['route'] = $routeName; 
        $resultArray['startSignal'] = $startSig; 
        $resultArray['startX'] = $startX;
        $resultArray['startY'] = $startY;
        $resultArray['direction'] = $direction;

        //picking up the end signal for the same route
        $end = mysqli_query($con, $routeEnds);
        while($row2 = mysqli_fetch_array($end)){
            if ($row2['id'] == $routeName){
                $endSignal = $row2['idSignal'];
                $endX = ((($row2['km'] - $rowMin[0]) / $range)*1000)+100;
                $endY = getYcoordinate($row2['line_name']);

                $resultArray['endSignal'] = $endSignal; 
                $resultArray['endX'] = $endX;
                $resultArray['endY'] = $endY;
            }
        }
        //now filtering out the track for the particular route , non-point
        if ($resultArray['startY'] == $resultArray['endY']){
            $tracks = mysqli_query($con, $routeTracks);
            while($row3 = mysqli_fetch_array($tracks)){
                if ($row3['idRoute'] == $routeName && $row3['firstTrack'] == 1 ){
                    $xFinish = getXfinish($range, $row3['length']);
                    $resultArray[$row3['idTrack']] = ['length'=>$row3['length'], 
                                                      'xStart'=>$startX, 
                                                      'yStart'=>$startY,   
                                                      'xFinish'=>$startX + $xFinish,
                                                      'yFinish'=>$startY ];

                } else if ($row3['idRoute'] == $routeName && $row3['firstTrack'] != 1 ){
                    foreach ($resultArray as $key => $value) {
                        if ($row3['prevTrack'] == $key){
                            $prevXstart = $resultArray[$key]['xFinish'];
                            $prevYstart = $resultArray[$key]['yFinish'];
                        }
                    }
                    $xFinish = getXfinish($range, $row3['length']);
                    $resultArray[$row3['idTrack']] = ['length'=>$row3['length'], 
                                                      'xStart'=>$prevXstart, 
                                                      'yStart'=>$prevYstart,   
                                                      'xFinish'=>$prevXstart + $xFinish,
                                                      'yFinish'=>$prevYstart
                                                      ];
                }

            }
        //now filtering out the track for plotting point tracks 
        } else {
            $tracks = mysqli_query($con, $routeTracks);
            while($row3 = mysqli_fetch_array($tracks)){
                if ($row3['idRoute'] == $routeName && $row3['firstTrack'] == 1 && $row3['pointTrack'] != 1){
                    $xFinish = getXfinish($range, $row3['length']);
                    $resultArray[$row3['idTrack']] = ['length'=>$row3['length'], 
                                                      'xStart'=>$startX, 
                                                      'yStart'=>$startY,   
                                                      'xFinish'=>$startX + $xFinish,
                                                      'yFinish'=>$startY ];

                } else if ($row3['idRoute'] == $routeName && $row3['firstTrack'] != 1 && $row3['pointTrack'] != 1){
                    foreach ($resultArray as $key => $value) {
                        if ($row3['prevTrack'] == $key){
                            $prevXstart = $resultArray[$key]['xFinish'];
                            $prevYstart = $resultArray[$key]['yFinish'];
                        }
                    }
                    $xFinish = getXfinish($range, $row3['length']);
                    $resultArray[$row3['idTrack']] = ['length'=>$row3['length'], 
                                                      'xStart'=>$prevXstart, 
                                                      'yStart'=>$prevYstart,   
                                                      'xFinish'=>$prevXstart + $xFinish,
                                                      'yFinish'=>$prevYstart
                                                      ];
                // first track and point track
                } else if ($row3['idRoute'] == $routeName && $row3['firstTrack'] == 1 && $row3['pointTrack'] == 1){
                    $pointTrack = mysqli_query($con, $pointTracks);


                // not first track and point track      
                } else if ($row3['idRoute'] == $routeName && $row3['firstTrack'] != 1 && $row3['pointTrack'] == 1){
                    foreach ($resultArray as $key => $value) {
                        if ($row3['prevTrack'] == $key){
                            $prevXstart = $resultArray[$key]['xFinish'];
                            $prevYstart = $resultArray[$key]['yFinish'];
                        }
                    }
                    $turnPoint = getXfinish($range, ($row3['length']/2));
                    $pointTrack = mysqli_query($con, $pointTracks);
                    while($row4 = mysqli_fetch_array($pointTrack)){ 
                        if ($row4['idTrack'] == $row3['idTrack']){
                                $yTurnEnd = getYcoordinate($row4['bLine']);
                        }
                    }                   

                    if ($row1['direction'] == 'down'){
                        $resultArray[$row3['idTrack']] = ['xStart'=>$prevXstart, 
                                                          'yStart'=>$prevYstart,
                                                          'xTurnStart'=> $prevXstart + $turnPoint,
                                                          'yTurnStart'=> $prevYstart,
                                                          'xFinish' => $prevXstart + $turnPoint + 50,
                                                          'yFinish' => $yTurnEnd
                                                          ];
                    } else {
                        $resultArray[$row3['idTrack']] = ['xStart'=>$prevXstart, 
                                                          'yStart'=>$prevYstart,
                                                          'xTurnStart'=> $prevXstart - $turnPoint,
                                                          'yTurnStart'=> $prevYstart,
                                                          'xFinish' => $prevXstart - $turnPoint -50,
                                                          'yFinish' => $yTurnEnd
                                                          ];
                    }
                }

            }
        }
        //print_r($resultArray);
        //header('Content-Type: application/json');
        echo json_encode($resultArray); 
        unset($resultArray);
    }


function getYcoordinate($line_name){
    if ($line_name == 'downSuburban'){
        $y= (800/20) * 8; // down Suburban
      } else if ($line_name == 'upSuburban'){
        $y= (800/20) * 10; // up Suburban
      } else if ($line_name =='downMain'){
        $y= (800/20) * 12; // down Main
      } else if ($line_name == 'upMain'){
        $y= (800/20) * 14; // up Main
      }
    return $y;    
}   

function getXfinish($trackRange, $trackLength){

    return ($trackLength/($trackRange*1000))*1000;
}


//  $dataArray = array();
//  $dataArray[] = array('idRoute'=>$row['id'], 'startSignal'=>$row['startSignal']);


mysqli_close($con);
?>

最佳答案

您需要dataType 而不是data

$.ajax({                              
    url: "visualiser/visualiser_RouteList.php",
    dataType: "JSON",
    async: false,
    success: function(data){
        console.log(data);
    } 
});

关于javascript - jquery 无法正确读取 PHP json_encode() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23846401/

相关文章:

javascript - 使用 JavaScript 对 HTML 输出 (ASP.Net) 所做的更改立即撤消

PHP:将 UTF8 字符编码为 html 实体

php - 意外状态行 : Y������ when using getInputStream() on HttpURLConnection

php - 添加多次PHP

javascript - Google Maps API v3 中缺少方法。我如何模拟 latRadians() 和 lngRadians()?

javascript - Vue js 结合两个组件的元素

javascript - 如何使用基于值的 Javascript 更改颜色?

javascript - 将键值对追加到数组的特定索引处

javascript - 完成步骤后,在 bootstrap Accordion 中添加 TICK 而不是 plus

javascript - 在 jquery 中向数字(如 123,456.78)添加逗号的最佳方法