自动完成jQuery远程XML文件

时间:2015-09-02 20:52:07

标签: php jquery xml

我将以下代码配置为引用非现场XML文件并自动完成并返回值。无论我是否像下面看到的那样对数据元素进行硬编码,或者如果我对数据进行注释,它都无法正常工作:元素输出。我也试图在两种情况下都改变Type:from Post to Get。我还确认.xml在指定的URL路径中,并尝试将其放在与您在下面看到的.php文件相同的目录中。网络服务器上也没有生成错误。

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">

  <title></title>

  <script type='text/javascript' src='http://code.jquery.com/jquery-1.6.3.js'></script>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script>

  <link rel="stylesheet" type="text/css" href="/css/result-light.css">
  <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/start/jquery-ui.css">

  <style type='text/css'>
    .red {color: red}
  </style>
  <script type='text/javascript'>

$(window).load(function(){
$.ajax({
    url: "domain/file.xml", 
    type: "POST", 
    dataType: "xml", 
    data: {
        xml: "<geonames><geoname><name>London</name><geonameId>2643743</geonameId><countryCode>GB</countryCode><countryName>United Kingdom</countryName></geoname><geoname><name>London</name><geonameId>6058560</geonameId><countryCode>CA</countryCode><countryName>Canada</countryName></geoname><geoname><name>The Tower of London</name><geonameId>6286786</geonameId><countryCode>GB</countryCode><countryName>United Kingdom</countryName></geoname></geonames>"
    }, //should not need to define 'data' on your own xml call
    success: function(xmlResponse) {
        var data = $("geoname", xmlResponse).map(function() {
            return {
                value: $("name", this).text() + ", " + ($.trim($("countryName", this).text()) || "(unknown country)"),
                id: $("geonameId", this).text()
            };
        }).get();
        $("#test").autocomplete({
            source: function(req, response) {
                var re = $.ui.autocomplete.escapeRegex(req.term);
                var matcher = new RegExp("^" + re, "i");
                response($.grep(data, function(item) {
                    return matcher.test(item.value);
                }));
            },
            minLength: 2,
            select: function(event, ui) {
                $("p#result").html(ui.item ? "Selected: " + ui.item.value + ", geonameId: " + ui.item.id : "Nothing selected, input was " + this.value);
            }
        });
    }
});
});//]]> 

</script>

</head>
<body>
<p  class="ui-widget">Try typing 'Lo' it will match on 'London'.</p>

<div class="ui-widget">
    <label for="test">London matches: </label>
    <input id="test" />
</div>

<p id="result" class="ui-widget red"></p>


</body>

</html>

1 个答案:

答案 0 :(得分:1)

如果您可以直接在浏览器或浏览器插件中打开远程URL,但不使用Ajax,则最可能的原因是同源策略和丢失的CORS头。

远程资源必须提供CORS headers。否则浏览器不会在XHR对象中打开它(jQuery.ajax()在内部使用XHR。)

在浏览器中打开开发人员工具的网络选项卡,查看请求/响应标题。