【问题标题】:Parsing XML syntax jQuery error解析 XML 语法 jQuery 错误
【发布时间】:2013-01-02 10:01:50
【问题描述】:

如果我手动键入点名称而不是变量res [点名称],则在 46 字符串中它可以工作。但如果没有,那就行不通了。

它的作用是:

  1. 点击该点
  2. 取点的名称
  3. 在维基百科中搜索
  4. 解析xml
  5. 从 xml 获取 URL
  6. 在 iframe 中打开 URL

我哪里做错了?

Pastebin code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>

    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>
        <script type="text/javascript">
            var map = null;

            function GetMap() {
                // Initialize the map
                map = new Microsoft.Maps.Map(document.getElementById("mapDiv"), {
                    credentials: "An-KyHsPpYClz9oHXMZ6X3SW6I44Ei2DTTrUS_QlXUW43qqsvOAQrT9ekVEIBT9u"
                });
                Microsoft.Maps.Events.addHandler(map, 'click', LatLong);
            }

            function LatLong(e) {
                if (e.targetType == "map") {
                    var point = new Microsoft.Maps.Point(e.getX(), e.getY());
                    var loc = e.target.tryPixelToLocation(point);
                    lola = "lo,loe".replace('lo', loc.latitude).replace('loe', loc.longitude);
                }
                MakeGeocodeRequest('An-KyHsPpYClz9oHXMZ6X3SW6I44Ei2DTTrUS_QlXUW43qqsvOAQrT9ekVEIBT9u');
            }

            function ClickGeocode(credentials) {
                map.getCredentials(MakeGeocodeRequest);
            }

            function MakeGeocodeRequest(credentials) {

                var geocodeRequest = "http://dev.virtualearth.net/REST/v1/Locations/" + lola + "/?output=json&jsonp=GeocodeCallback&key=" + credentials;
                CallRestService(geocodeRequest);
            }


            function GeocodeCallback(result) {
                res = (result.resourceSets[0].resources[0].name);
                console.log(res);
                $(document).ready(function () {
                    $.ajax({
                        type: "GET",
                        url: "http://en.wikipedia.org/w/api.php?action=opensearch&limit=1&format=xml&search="+res,
                        dataType: "xml",
                        success: xmlParser
                    });
                });
            }

            function xmlParser(xml) {
                var str = jQuery(xml).find("Url").text()
                alert(str);
                document.getElementById("iframe").src=str.replace('en.', 'm.');
            }


            function CallRestService(request) {
                var script = document.createElement("script");
                script.setAttribute("type", "text/javascript");
                script.setAttribute("src", request);
                document.body.appendChild(script);
            }
        </script>
    </head>

    <body onload="GetMap();">
        <iframe align="right" height="500px" id="iframe" src="" width="48%"></iframe>
        <div id='mapDiv' style="position:relative; width:48%; height:500px;"></div>
    </body>

</html>

【问题讨论】:

  • 愿意分享console.log(res) 打印的内容以及“不起作用”的实际含义吗?
  • console.log(res) 打印点的名称,以了解我在 wiki 中寻找的内容。不起作用意味着我得到了空的alert 而不是城镇/地点等的网址。
  • 我怀疑“点的名称”包含在 URL 中具有特殊含义的字符。当然,我们仍然不知道console.log(res) 打印了什么,因为我们对其输出只有一个模糊的描述。我注意到您提到了一条错误消息,但从未与我们分享。这个问题无法回答,因为它忽略了重要信息。
  • 例如,res 等于Wróblew, Woj. Lodzkie,波兰。然后 url http://en.wikipedia.org/w/api.php?action=opensearch&amp;limit=1&amp;format=xml&amp;search=Wróblew, Woj. Lodzkie .Empty 空格将转换为特殊符号和 xml 就可以了,但是如果我使用变量 - res,它就不会了。
  • Console.log(res) 写入控制台Wróblew, Woj. Lodzkie(点名称)

标签: jquery xml parsing


【解决方案1】:

所以我们基本上有这个:

function GeocodeCallback(result) {
    res = "Wróblew, Woj. Lodzkie";
    $(document).ready(function () {
        $.ajax({
            type: "GET",
            url: "http://en.wikipedia.org/w/api.php?action=opensearch&limit=1&format=xml&search="+res,
            dataType: "xml",
            success: xmlParser
        });
    });
}

我能发现的主要问题:

  1. 您依赖全局 res 变量在 AJAX 调用中提供 url。如果浏览器尝试同时执行两个 AJAX 请求,这很容易失败。你错过了var 关键字吗?

  2. 您不能在 URL 中注入随机字符串。在 vanilla JavaScript 中,您会使用 encodeURIComponent(),但我确信 jQuery 允许简单地传递一个对象。

这可能与您的问题无关(无法从您那里获得确切的错误消息),但这是我的最佳猜测。

【讨论】:

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