Javascript PHP将查询中的数据转换为json数组

Javascript PHP将查询中的数据转换为json数组,javascript,php,Javascript,Php,我有一些查询数据库并返回地址数据的代码。然后,我将地址转换为json格式的纬度和经度,以便使用javascript函数在google地图上显示标记。总体结果是关于json数据意外结束的错误代码。我认为问题在于php文件。当我自己运行它时,我得到一个断页响应。有人知道我为什么会出错吗 以下是php代码: $address = pg_query($conn, " SELECT incident.address, incident.city, incident.state_1 FROM

我有一些查询数据库并返回地址数据的代码。然后,我将地址转换为json格式的纬度和经度,以便使用javascript函数在google地图上显示标记。总体结果是关于json数据意外结束的错误代码。我认为问题在于php文件。当我自己运行它时,我得到一个断页响应。有人知道我为什么会出错吗

以下是php代码:

$address = pg_query($conn, "
SELECT 
  incident.address,
  incident.city,
  incident.state_1
FROM 
  fpscdb001_ws_001.incident
WHERE
  incident.initial_symptom = 'Chrome Upgrade' AND
  incident.is_installed != 'true';");

  if (!$address) {
          echo "Query failed\n";
          exit;
        }
$arr = array();
while ($markers = pg_fetch_row($address)){
  $Lat = $xml->result->geometry->location->lat;
  $Lon = $xml->result->geometry->location->lng;
  $arr[] = array("lat" => $Lat, "lng" => $Lng);
}
echo json_encode($arr);

  }
pg_close($conn);
下面是javascript:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
    var arr = JSON.parse(xhr.responseText);
    if(Array.isArray(arr)){
        showMarkers(arr);
    }
}
}
xhr.open('GET', 'markers.php', true);
xhr.send();

function showMarkers(locations){
var markers = locations.map(function(location, i) {
  return new google.maps.Marker({
    position: location,
    label: labels[i % labels.length]
  });
});

var markerCluster = new MarkerClusterer(map, markers, {imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'});}}
控制台: 未捕获的语法错误:JSON输入意外结束 在JSON.parse()处
在XMLHttpRequest.xhr.onreadystatechange(map.php:36)

中,您正在删除$Lon并使用$Lng:

  $Lon = $xml->result->geometry->location->lng;
  $arr[] = array("lat" => $Lat, "lng" => $Lng);

另外,问题的标题是错误的:您想要的是json数组,而不是xml数组

  $Lon = $xml->result->geometry->location->lng;
  $arr[] = array("lat" => $Lat, "lng" => $Lng);

另外,问题标题是错误的:您想要的是json数组,而不是xml数组示例代码,请测试

markers.php

<?php

$p =   [

        ['lat'=>-37.774785, 'lng'=> 145.137978],
        ['lat'=>-37.819616, 'lng'=> 144.968119],
        ['lat'=>-38.330766, 'lng'=> 144.695692],
        ['lat'=>-39.927193, 'lng'=> 175.053218],
        ['lat'=>-41.330162, 'lng'=> 174.865694],
        ['lat'=>-42.734358, 'lng'=> 147.439506],
        ['lat'=>-42.734358, 'lng'=> 147.501315],

      ];

echo json_encode($p);
<?php

$p =   [

        ['lat'=>-37.774785, 'lng'=> 145.137978],
        ['lat'=>-37.819616, 'lng'=> 144.968119],
        ['lat'=>-38.330766, 'lng'=> 144.695692],
        ['lat'=>-39.927193, 'lng'=> 175.053218],
        ['lat'=>-41.330162, 'lng'=> 174.865694],
        ['lat'=>-42.734358, 'lng'=> 147.439506],
        ['lat'=>-42.734358, 'lng'=> 147.501315],

      ];

return json_encode($p);

示例代码,请测试

markers.php

<?php

$p =   [

        ['lat'=>-37.774785, 'lng'=> 145.137978],
        ['lat'=>-37.819616, 'lng'=> 144.968119],
        ['lat'=>-38.330766, 'lng'=> 144.695692],
        ['lat'=>-39.927193, 'lng'=> 175.053218],
        ['lat'=>-41.330162, 'lng'=> 174.865694],
        ['lat'=>-42.734358, 'lng'=> 147.439506],
        ['lat'=>-42.734358, 'lng'=> 147.501315],

      ];

echo json_encode($p);
<?php

$p =   [

        ['lat'=>-37.774785, 'lng'=> 145.137978],
        ['lat'=>-37.819616, 'lng'=> 144.968119],
        ['lat'=>-38.330766, 'lng'=> 144.695692],
        ['lat'=>-39.927193, 'lng'=> 175.053218],
        ['lat'=>-41.330162, 'lng'=> 174.865694],
        ['lat'=>-42.734358, 'lng'=> 147.439506],
        ['lat'=>-42.734358, 'lng'=> 147.501315],

      ];

return json_encode($p);

为什么需要阵列?只需传递一个包含两个值的字符串。如果由于错误响应不是JSON格式而发生错误,该怎么办?我指的是您在哪里回显
“Query failed\n”
您可以控制台.log()检查xhr.responseText的内容并将结果粘贴到这里吗?我添加了控制台.log(arr),但它没有显示任何内容。我想错误发生在JSON.parse()方法中,所以控制台.log(xhr.responseText)作为OnReadyState的第一个声明,更改将是一个更好的主意。此外,正如Ananth Rao所指出的,如果查询失败,您不会返回JSON,也不会在js代码中处理。为什么需要数组?只需传递一个包含两个值的字符串。如果由于错误响应不是JSON格式而发生错误,该怎么办?我指的是您在哪里回显
“Query failed\n”
您可以控制台.log()检查xhr.responseText的内容并将结果粘贴到这里吗?我添加了控制台.log(arr),但它没有显示任何内容。我想错误发生在JSON.parse()方法中,所以控制台.log(xhr.responseText)作为OnReadyState的第一个声明,更改将是一个更好的主意。另外,正如Ananth Rao所指出的,如果查询失败,您不会返回JSON,也不会在js代码中处理。谢谢,我没听清楚。我对代码做了更改,但还是出现了一个错误。谢谢,我没听懂。我对代码进行了更改,但仍然出现错误。