responseText 有效,但 responseXML 始终为 null

2023-12-03

我已经浏览了这里可以找到的所有答案,但无法解决这个问题。 我很确定我没有错过任何明显的事情。

我正在尝试加载基于经纬度的地图标记。问题是,当我尝试返回 AJAX 响应时,responseXML 始终为 null,如果我使用responseText,它可以正常工作,但显然下一步不起作用。

这是生成 XML 的 PHP:

<?php
header('Content-type: text/xml');
?>    
<?xml version="1.0" encoding="ISO-8859-1"?>
<properties>
    <![CDATA[
<?php 
if ($body != null): 
        foreach ($body as $property): ?>
        <property>
            <lat><?php echo $property -> lat; ?></lat>
            <long><?php echo $property -> long; ?></long>
            <name><?php echo $property -> property_name; ?></name>
            </property>
<?php endforeach;
endif; ?>
    ]]>
</properties>

我可以在 Fiddler 中看到请求是由

得到 /letsgo/index.php/hotmaps/get_properties_ajax/22.270888501350186/22.288560098193066/114.13720860290528/114.19827713775635 HTTP/1.1

实体内容类型:text/xml

虽然当我在 fiddler 的 XML 视图中查看它时,它似乎是空的,

这是原始响应

HTTP/1.1 200 OK
Date: Tue, 15 Jan 2013 11:04:27 GMT
Server: Apache/2.4.2 (Win32) PHP/5.4.4
X-Powered-By: PHP/5.4.4
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 310
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/xml



<?xml version="1.0" encoding="ISO-8859-1"?>
<properties>
    <![CDATA[
        <property>
            <lat>22.2776</lat>
            <long>114.173</long>
            <name>Kaxo Tower test</name>
            </property>
        <property>
            <lat>22.2803</lat>
            <long>114.16</long>
            <name>Kuno Tower</name>
            </property>
    ]]>
</properties>

这是每次移动地图时调用的创建标记函数

// make the ajax request
function loadXMLDoc(downUrl){
    var xmlhttp;
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
      }
    else {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function() {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {

            //var propertiesXml = xmlhttp.responseText; // WORKS FINE!!
            var propertiesXml = xmlhttp.responseXML; // ALWAYS null
            //alert(propertiesXml);     
            var propertiesRows = propertiesXml.getElementsByTagName("property");

            for (var i = 0; i < propertiesRows.length; i++) {           
            var propertiesRow = propertiesRows[i];
            var xmlLat = propertiesRow.getElementsByTagName("lat")[0];
            var xmlLong = propertiesRow.getElementsByTagName("long")[0];
            var propertyLatLong = new google.maps.LatLng(parseFloat(xmlLat.firstChild.data),parseFloat(xmlLat.firstChild.data));            
            // create each marker
            createMarker(propertyLatLong);
            }   

        }
      }
    xmlhttp.open("GET", downUrl, false); // false or true? makes no difference
    xmlhttp.setRequestHeader("Content-type", "text/xml");
    xmlhttp.send(); 
}

Chrome 控制台显示,这是我用 null 提供 getElementsByTagName 时遇到的错误

未捕获的类型错误:无法调用 null 的方法“getElementsByTagName”

这是在我本地的 Apache 上运行的

有什么建议么?

/** 更新 - 工作代码 **/

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0; padding: 0 }
      #map_canvas { height: 100% }
    </style>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=APIKEYHERE&sensor=false">
    </script>

    <script type="text/javascript">  

      // initialise map 
      function initialize() {

      // set starting latlong
      var myLatlng = new google.maps.LatLng(22.2776, 114.173); 

      // set initial map options        
      var mapOptions = {
        center: myLatlng,
        zoom: 13,
        mapTypeId: google.maps.MapTypeId.ROADMAP
        };

      // create the map                       
      var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 

      // listen for changes in map bounds - after map has stopped moving!!      
      google.maps.event.addListener(map,'idle', function () {      
        loadByBounds(map);          
        });                 
      }

      // if the bounds have changed 
      function loadByBounds(map) {  

        var bounds = map.getBounds();       
        var swPoint = bounds.getSouthWest();
        var nePoint = bounds.getNorthEast();

        // specific co ordinates
        var swLat = swPoint.lat();
        var swLng = swPoint.lng();
        var neLat = nePoint.lat();
        var neLng = nePoint.lng();               

        var downUrl = "<?php echo site_url('hotmaps/get_properties_ajax'); ?>/"+swLat+"/"+neLat+"/"+swLng+"/"+neLng;

        // load the 
        loadXMLDoc(downUrl, map); 

        // clear icons outside of bounding box

        //....


        }

        // make the ajax request
        function loadXMLDoc(downUrl, map){
            var xmlhttp;
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
              }
            else {// code for IE6, IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
              }
            xmlhttp.onreadystatechange=function() {
              if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {

                    var propertiesXml = xmlhttp.responseText; // WORKS FINE!!

                    // remove whitespaces from start and end (.trim() doesnt work)
                    propertiesXml = propertiesXml.replace(/^\s+|\s+$/g,'');                 

                    // manually parse to XML DOM object 
                    var parser = new DOMParser();                   
                    var xmlDoc;                 
                       try {
                            xmlDoc = parser.parseFromString (propertiesXml, "text/xml");
                        } catch (e) {
                            alert ("XML parsing error.");
                            return false;
                        };

                    //console.log(xmlDoc);

                    // get each property
                    var propertiesRows = xmlDoc.getElementsByTagName("property");   

                    //alert(console.log(propertiesRows));   
                    for (var i = 0; i < propertiesRows.length; i++) {

                        var propertiesRow = propertiesRows[i];
                        var xmlLat = propertiesRow.getElementsByTagName("lat")[0];
                        var xmlLong = propertiesRow.getElementsByTagName("long")[0];
                        var propertyLatLong = new google.maps.LatLng(parseFloat(xmlLat.firstChild.data),parseFloat(xmlLong.firstChild.data));           
                        // create each marker
                        createMarker(propertyLatLong, map);
                    }
                 }
             }
            xmlhttp.open("GET", downUrl, false);
            xmlhttp.setRequestHeader("Content-type", "text/xml");
            xmlhttp.send(); 
        }   

        // create new markers
        function createMarker(propertyLatLong, map){             
            var dynamicMarker = new google.maps.Marker({

                map:map,
                draggable:false,
                position: propertyLatLong
            });
            debugger;           
        }       
    </script>
  </head>
  <body onload="initialize()">      
    <div id="map_canvas" style="width:100%; height:100%"></div>
  </body>
</html>

您可以尝试自己解析 XML:

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlhttp.responseText, "application/xml");

像这样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

responseText 有效,但 responseXML 始终为 null 的相关文章

随机推荐

  • 在异步函数中返回等待值就是返回一个承诺

    在 Javascript 中 我试图从异步函数返回等待结果 看来 如果我在异步函数中使用该结果 那么一切都会正常工作 它会被视为resolve 参数 并且一切都很好 但是 如果我尝试返回结果 即使存在等待语句 它也会被视为回调 例如 在异步
  • 如何在非 unicode Delphi 版本中构造带有变音符号的 WideString?

    我正在尝试构建一个 测试 WideString of U 00E1 带尖音符的小写拉丁文 A 但使用它的分解形式 拉丁文小写字母 A U 0061 结合尖锐口音 U 0301 所以我有代码片段 var test WideString beg
  • 通过python程序访问网络文件夹

    只是我正在做的事情的简要概述 我正在尝试在网络目录中使用 python 自动执行一些 pdf 合并例程 其中涉及在特定网络位置复制 删除和创建文件 如果我的语言不太准确 请道歉 我正在 Windows 7 上使用 python 3 6 进行
  • 如何在 Matlab 中使用 RESTful Web 服务

    我有一个数据提供程序 它提供基于 Web 的 RESTful 界面 我正在尝试将这些数据导入 Matlab 界面相对简单 但我仍在寻找有这方面经验的人 该服务本身不提供 SOAP WSDL 但 Matlab 可以轻松使用 供应商有一个 适配
  • 如何在需要时保存和检索视图

    我的目标是使会话大小尽可能小 为什么 这是另一个话题 我所拥有的是 faces config xml 中声明的 Phase 侦听器
  • Kindle Fire 自定义软键菜单

    有谁知道如何从软键菜单中删除或隐藏菜单和搜索按钮 我想完成 Pulse 应用程序 隐藏搜索按钮 或 Kindle Fire 帮助和反馈应用程序 隐藏搜索按钮和菜单按钮 中正在执行的操作 我很好奇他们是否真的修改了软键菜单 或者使应用程序全屏
  • 如何在路径中编写带有变量的vba

    这是我在这个网站上发表的第二篇文章 我对 VBA 还比较陌生 我今天的问题是 如何将单元格值添加到路径字符串以指定我想要保存工作簿的文件夹 Dim Path As String Dim FileName1 As String Dim Fil
  • Eclipse 插件中标记的悬停文本

    我有一个带有问题标记的自定义编辑器 标记在 问题 视图中正确显示 包含图标 位置和文本 并且问题图标在编辑器的左边距中正确显示 我希望将鼠标悬停在边距中的问题标记图标上时在弹出窗口中显示相同的错误消息文本 就像在 Java 编辑器中一样 现
  • LINQ查询问题

    无法在 Feed 中获得任何结果 feedXML 具有正确的数据 XDocument feedXML XDocument Load http search twitter com search atom q twitter var feed
  • 使用 .addOnSuccessListener 返回私有方法的值

    再会 有什么方法可以实现这个吗 val db Firebase firestore val userID Firebase auth currentUser uid val infoRef db collection user docume
  • 如何在 Mongo 中查询“is not null”?

    我想执行以下查询 db mycollection find HAS IMAGE URL 正确的语法应该是什么 这将返回带有名为 IMAGE URL 键的所有文档 但它们可能仍然具有空值 db mycollection find IMAGE
  • BlueZ 兼容内核版本

    我在 Linux 中使用内核版本 3 0 35 和 bluez 4 98 这样我就可以按照 SO 问题之一中给出的 hcitool 命令来宣传 ibeacon 我还能够连接到其他 ble 设备 但无法使用 gatttool 中的 主要 列出
  • 在javascript中将数字转换为日期格式yyyymmdd到mm/dd/yyyy

    我正在获取 XML 提要并使用 JavaScript 将其写入 HTML 日期字段有 20120319 我想做的是将其转换为更易读的格式 例如 03 19 2012 在 JavaScript 中是否有一种简单的方法可以做到这一点 一种方法是
  • Spark:将 2 元组键 RDD 与单键 RDD 连接的最佳策略是什么?

    我有两个想要加入的 RDD 它们看起来像这样 val rdd1 RDD T U val rdd2 RDD T W V 碰巧的是 关键值rdd1是唯一的 并且元组键值rdd2是独一无二的 我想加入这两个数据集 以便得到以下 rdd val r
  • adb 无法将 .apk 文件复制到 Android 模拟器:没有这样的文件或目录

    我在让 MyFirstApp Hello World Android 应用程序在模拟器中运行时遇到了障碍 我正在按照以下网址的说明进行操作 http developer android com training basics firstap
  • 从 XSL 调用 Java (SAXON)

    我正在尝试使用 java 中的 Saxon 处理器 我正在使用saxon9ee jar里面 saxonee9 3 0 11j zip 刚刚下载 没有许可证 是否需要它才能工作 Their 可以在这里找到资源 http www saxonic
  • Swift - 圆角半径和投影问题

    我正在尝试创建一个按钮圆角 and a 阴影 无论我如何切换 该按钮都无法正确显示 我试过了masksToBounds false and masksToBounds true 但是要么圆角半径起作用而阴影不起作用 要么阴影起作用而圆角半径
  • @ManagedBean @Component 类中的 @Autowired 服务在 JSF 请求期间为 null [重复]

    这个问题在这里已经有答案了 我尝试过将 Spring 3 MVC 与 JSF 2 结合起来 我在 Spring 和 JSF 方面有一些经验 但之前从未尝试过加入它们 最后我有2个文件 ManagedBean name userBean Sc
  • CUDA C++11,lambda 数组,按索引的函数,不起作用

    我在尝试让 CUDA 程序按索引管理 lambda 数组时遇到问题 重现问题的示例代码 include
  • responseText 有效,但 responseXML 始终为 null

    我已经浏览了这里可以找到的所有答案 但无法解决这个问题 我很确定我没有错过任何明显的事情 我正在尝试加载基于经纬度的地图标记 问题是 当我尝试返回 AJAX 响应时 responseXML 始终为 null 如果我使用responseTex