Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从远程网站解析xml数据_Javascript_Jquery_Html_Xml_Ajax - Fatal编程技术网

Javascript 从远程网站解析xml数据

Javascript 从远程网站解析xml数据,javascript,jquery,html,xml,ajax,Javascript,Jquery,Html,Xml,Ajax,我想解析来自远程网站的xml数据…但是我无法解析xml数据,我只得到了一个错误。但我能够解析来自同一远程网站的JSON数据。我用来解析xml数据的代码是: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml

我想解析来自远程网站的xml数据…但是我无法解析xml数据,我只得到了一个错误。但我能够解析来自同一远程网站的JSON数据。我用来解析xml数据的代码是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Aviation</title>
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
    var result;
    function xmlparser() {
        $.ajax({
            type: "GET",
            url: "http://services.faa.gov/airport/status/IAD?format=xml",
            dataType: "xml",
            success: function (xml) { 
                result = xml.city;
                document.myform.result1.value = result;
            },
            error: function (xml) {
                alert(xml.status + ' ' + xml.statusText);
            }
        });             
    }        
</script>    
</head>
<body>
<p id="details"></p>
<form name="myform">
    <input type="button" name="clickme" value="Click here to show the city name" onclick=xmlparser() />
    <input type="text" name="result1" readonly="true"/>        
</form>
</body>
</html>

航空
var结果;
函数xmlparser(){
$.ajax({
键入:“获取”,
url:“http://services.faa.gov/airport/status/IAD?format=xml",
数据类型:“xml”,
成功:函数(xml){
结果=xml.city;
document.myform.result1.value=结果;
},
错误:函数(xml){
警报(xml.status+“”+xml.statusText);
}
});             
}        

因为我已经打印了错误消息,所以我只在警报框中以“o错误”的形式获取错误。请任何人帮助解析来自远程网站的xml数据。 注意:我还有“城市”而不是“城市”,但它不起作用。。。
提前感谢…

我认为这不起作用,因为该服务仍在返回xml。jsonp需要一个n对象文本作为传递给回调的参数。我相信,如果您在本地运行此程序,您将意识到在您的成功中没有可消耗的数据。试试这个

$.ajax({
    type: "GET",
    url: "http://services.faa.gov/airport/status/IAD?format=json",
    dataType: "jsonp",
    success: function (data) {
        document.myform.result1.value = data.city;
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert(errorThrown);
    }
});
下面是使用asp.net mvc 3创建代理的示例。我刚刚创建了一个操作,它返回一个映射到字符串的ContentResult,但我将内容类型定义为text/xml。这只是向服务发出一个webrequest,并将流读入一个字符串中,以便在响应中发回

[HttpGet]
public ContentResult XmlExample()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://services.faa.gov/airport/status/IAD?format=xml");
    string xml = null;
    using (WebResponse response = request.GetResponse())
    {
        using (var xmlStream = new StreamReader(response.GetResponseStream()))
        {
            xml = xmlStream.ReadToEnd();
        } 
    }

    return Content(xml, "text/xml");
}
您的xmlParser函数如下所示:

<script type="text/javascript">
    var result;
    function xmlparser() {
        $.ajax({
            type: "GET",
            url: "XmlExample",
            dataType: "xml",
            success: function (xml) {
                result = $(xml).find("City").text();
                document.myform.result1.value = result;
            },
            error: function (xml) {
                alert(xml.status + ' ' + xml.statusText);
            }
        });             
    }        
</script> 

var结果;
函数xmlparser(){
$.ajax({
键入:“获取”,
url:“XmlExample”,
数据类型:“xml”,
成功:函数(xml){
结果=$(xml.find(“City”).text();
document.myform.result1.value=结果;
},
错误:函数(xml){
警报(xml.status+“”+xml.statusText);
}
});             
}        
jQueryAjax通过在内部使用$.parseXML转换数据,这消除了我们甚至在成功块中调用它的要求。此时,您就有了一个jQuery对象,可以使用它的默认DOM函数来查找城市节点


确保将XmlExample替换为它根据控制器映射到的url。

解决方案非常简单(在的评论中提到)

1.在服务器上添加一个文件
IAD\u proxy.php

2.将以下代码放入其中

标题(“内容类型:text/xml;charset=utf-8”);
回显文件\u获取\u内容('http://services.faa.gov/airport/status/IAD?format=xml');
3.将Ajax请求中的
url
更改为
IAD\u proxy.php

如果您正在使用任何其他服务器端语言,请尝试实现相同的想法

编辑:请阅读相关内容,以下是我尝试过的内容,它正在发挥作用

脚本:

$.ajax({
键入:“获取”,
url:“IAD_proxy.php”,
数据类型:“xml”,
成功:函数(xml){
警报($(xml.find('City').text());
},
错误:函数(xml){
警报(xml.status+“”+xml.statusText);
}
});
在这里,我用
document.write($(xml.find('City').text()尝试了它


Ajax无法执行跨域请求。如果返回的响应是jsonp,则必须使用服务器端脚本代理JavaScript可以通过Ajax执行跨域请求的信息。当涉及到xml和json时,您不能从JavaScript执行跨域请求,@Pekka评论说,您将需要一个服务器端代理来发送请求。@Pekka:请您解释一下如何使用此示例执行此操作???但是为什么我能够使用JSON数据在ajax中执行跨域请求呢???谢谢…是的,甚至jsonp也是一个灾难性的跨浏览器(我在IE6-7中确实找不到任何方法)IE8本身也是一个痛苦的灾难(使用XDomainRequest)。无论如何然后可以使用JSONP使用服务器端代理。jquery为此提供了支持。但我不认为这是一个跨doamin的问题。Prabu,你能在网络视图中查看响应是什么吗?不确定我为什么会收到否决票,因为如果你实际运行上面的ajax代码,你会看到数据参数是服务返回的json。引自问题“但我能够解析来自同一远程网站的json数据”。OP已经能够做到这一点了,问题是关于XML的。@Adnan我想我们在这里有些分歧。您是对的,他问您是否可以通过JavaScript从跨域请求解析xml。我只是让他知道,除非你使用jsonp并给他一个jsonp解决方案,否则你无法完成这个跨域的任务。他可以从他的域中创建一个代理,然后通过调用他的代理端点来使用JavaScript,代理端点反过来调用services.faa.gov服务。@DeathBedMotorcade,OP已经知道(我在前面的评论中引用了同一句话),您没有添加任何内容。说XML不起作用,只需一个注释即可。看,你自己知道你没有提供答案(你编辑了你的评论来添加代理的东西),现在如果你的答案中有这个(可能有一些PHP代理的例子),我很乐意投票。@prabu R我可以给你一个使用asp.net mvc的代理示例,如果你在服务器端代码中使用的是asp.net mvc的话。我已经尝试过了……但是它显示的警报框是“200 OK”……仍然是“error”里面的,只有正确的吗?@unludo,引用OP的评论“这有解决方案吗?”。我非常高兴看到你发布一个客户端解决方案,在这种情况下,我会学到一些新东西。非常感谢。