【问题标题】:Java Script PHP XML downloadUrlJavascript PHP XML 下载地址
【发布时间】:2016-12-22 21:11:35
【问题描述】:

下面的 java 脚本正在从 PHP 下载 XML(参见第二个 XML sn-p),但是当它完成后,downloadUrl 会显示 XML 数据(而不是带有标记的 google 地图)流。在屏幕改变之前,我可以看到地图上的标记,所以我相当确定来自PHP 的 XML 正在正确发送到 java 脚本,我只是不确定为什么PHP 本身在病房后运行.

function load() {

          var infoWindow = new google.maps.InfoWindow;
          initMap();

          // Change this depending on the name of your PHP file
          downloadUrl("gpsx.php", function(data) {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("marker");
            for (var i = 0; i < markers.length; i++) {
              var keyid = markers[i].getAttribute("keyid");
              console.log(keyid);
              var deviceid = markers[i].getAttribute("deviceid");
              var accessid = markers[i].getAttribute("accessid");
              var datex = markers[i].getAttribute("date");
              var timex = markers[i].getAttribute("time");
              var point = new google.maps.LatLng(
                  parseFloat(markers[i].getAttribute("lng")),
                  parseFloat(markers[i].getAttribute("lat")));
              var sats = markers[i].getAttribute("sats");
              var speedm = markers[i].getAttribute("speedm");
              var histon = markers[i].getAttribute("histon");
              var histstart = markers[i].getAttribute("histstart");
              var histon = markers[i].getAttribute("hist_many");
              var html = "<b>" + datex + "</b> <br/>" + timex;
              var dtstr = "Satellites " + sats + " Speed " + speedm + " D/T:  " + datex + " " + timex;
              var image = "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=" + i + "|FF0000|000000";
              var marker = new google.maps.Marker({map: map,position: point,title: dtstr,icon: image });
              bindInfoWindow(marker, map, infoWindow, html);
            }
          });
        }
function bindInfoWindow(marker, map, infoWindow, html) {
      google.maps.event.addListener(marker, 'click', function() {
        infoWindow.setContent(html);
        infoWindow.open(map, marker);
      });
    }

function downloadUrl(url, callback) {
      var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;

      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          request.onreadystatechange = doNothing;
          callback(request, request.status);
        }
      };

      request.open('GET', url, true);
      request.send(null);
    }

function doNothing() {}

function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
    center: {lat: 39.833, lng: -98.585},
    zoom: 12
    });
  }

<?php
// session_start();
$dom = new DOMDocument("1.0","UTF-8");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);

$servername ="localhost";
$username = "username";
$password = "password";
$dbname = "gps";

$dev = $_SESSION["devid"];
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
$sql = "SELECT keyID , deviceID, accessID, lng, lat, date, time, pstn,sats,speedmph FROM hist_data WHERE deviceID='" . $dev . "' ORDER BY ABS(pstn);";
$result = mysqli_query($conn,$sql);
$nums = mysqli_num_rows($result);

if ($nums > 0) {
    header("Content-type: text/xml");
    while($row = mysqli_fetch_array($result)) {
        $node = $dom->createElement("marker");
        $newnode = $parnode->appendChild($node);
        $newnode->setAttribute("keyid", $row['keyID']);
        $newnode->setAttribute("deviceid",$row['deviceID']);
        $newnode->setAttribute("accessid",$row['accessID']);
        $newnode->setAttribute("lng",$row['lng']);
        $newnode->setAttribute("lat",$row['lat']);
        $newnode->setAttribute("date",$row['date']);
        $newnode->setAttribute("time",$row['time']);
        $newnode->setAttribute("sats",$row['sats']);
        $newnode->setAttribute("speedm",$row['speedmph']);
        $newnode->setAttribute("histon",$hist_on);
        $newnode->setAttribute("histstart",$hist_start);
        $newnode->setAttribute("histmany",$hist_many);
    }
} else {
    echo "0 results";
}
echo $dom->saveXML();
?>

<markers>
<marker keyid="94454" deviceid="1e002c001547353236343033" accessid="1fa33427cd2b9f8beb75b6e156e545d5b20e33e7" lng="29.635313" lat="-95.773415" date="2016-08-15" time="02:02:05.722Z" sats=" 0.000000" speedm=" 0.552374" histon="Y" histstart="20" histmany="9"/>
<marker keyid="3339" deviceid="1e002c001547353236343033" accessid="1fa33427cd2b9f8beb75b6e156e545d5b20e33e7" lng="29.635300" lat="-95.773338" date="2016-08-15" time="02:17:05.644Z" sats=" 0.000000" speedm=" 0.621421" histon="Y" histstart="20" histmany="9"/>
<marker keyid="2552" deviceid="1e002c001547353236343033" accessid="1fa33427cd2b9f8beb75b6e156e545d5b20e33e7" lng="29.635216" lat="-95.773270" date="2016-08-15" time="02:32:05.787Z" sats=" 0.000000" speedm=" 0.448804" histon="Y" histstart="20" histmany="9"/>
<marker keyid="95112" deviceid="1e002c001547353236343033" accessid="1fa33427cd2b9f8beb75b6e156e545d5b20e33e7" lng="29.635225" lat="-95.773315" date="2016-08-15" time="02:47:05.711Z" sats=" 0.000000" speedm=" 0.218648" histon="Y" histstart="20" histmany="9"/>
<marker keyid="32275" deviceid="1e002c001547353236343033" accessid="1fa33427cd2b9f8beb75b6e156e545d5b20e33e7" lng="29.635281" lat="-95.773399" date="2016-08-15" time="03:02:05.735Z" sats=" 0.000000" speedm=" 0.782530" histon="Y" histstart="20" histmany="9"/>
<marker keyid="41199" deviceid="1e002c001547353236343033" accessid="1fa33427cd2b9f8beb75b6e156e545d5b20e33e7" lng="29.635210" lat="-95.773216" date="2016-08-15" time="03:17:05.763Z" sats=" 0.000000" speedm=" 0.517851" histon="Y" histstart="20" histmany="9"/>
<marker keyid="33761" deviceid="1e002c001547353236343033" accessid="1fa33427cd2b9f8beb75b6e156e545d5b20e33e7" lng="29.635267" lat="-95.773315" date="2016-08-15" time="03:32:05.780Z" sats=" 0.000000" speedm=" 0.368249" histon="Y" histstart="20" histmany="9"/>
</markers>

【问题讨论】:

  • 你能解释一下unsure why the PHP itself is running after wards.的意思吗? request.onreadystatechange = doNothing;的目的是什么?
  • 基本上函数 load() 运行并显示带有所有标记的谷歌地图,大约 1/2 秒。之后,我的屏幕上显示了 XML。我添加了一个 exit();调用到 php 代码的末尾,现在地图显示后我的屏幕上没有显示 XML。
  • 您在何时何地调用load 函数?
  • 您的代码按预期工作。您确定要在正确的位置寻找标记吗? (德克萨斯州休斯顿以外)
  • 我的 PHP 代码中有错字。结尾 ?> 不见了。我编辑了代码 sn-ps 只是为了让每个人都更清楚。感谢您测试我写得不好的代码。

标签: javascript php xml google-maps


【解决方案1】:

?> 从 PHP 代码中丢失。我最初添加了 exit() 来修复它,但是当我仔细观察时,我发现了我的方式的错误!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2016-05-12
    • 2020-09-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多