jQuery 读取 xml 错误

发布于 2024-08-19 18:38:42 字数 2437 浏览 10 评论 0原文

我正在尝试使用 jQuery 和雅虎地图服务编写一个简单的位置查​​找调用。即,用户将一个位置放入搜索框中,当他们绑定 jQuery 时,会调用我网站上的一个页面,该页面会从 yahoo 返回 XML。

Geocode.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    var url= "http://local.yahooapis.com/MapsService/V1/geocode?appid=SjCk7UjV34H0L9VoW5dFEXFGvsQuKX0xwIPNBX.rY8XxrWZbIYeSScFGuMrJyen_QwGKpLk-&location=" + Request.QueryString["location"];

    var oBuilder = new StringBuilder();
    var oStringWriter = new StringWriter(oBuilder);
    var oXmlReader = new XmlTextReader(url);
    var oXmlWriter = new XmlTextWriter(oStringWriter);
    while (oXmlReader.Read())
    {
        oXmlWriter.WriteNode(oXmlReader, true);
    }
    oXmlReader.Close();
    oXmlWriter.Close();
    Response.Clear();
    Response.Write(oBuilder.ToString()); 
    Response.Flush();
    Response.End(); 
}

Geocode.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Geocode.aspx.cs" Inherits="Search_Geocode" %>

我的搜索页面使用以下 jQuery 代码来调用此页面:

function findAddress() {
    var address = document.getElementById('ctl00_ContentPlaceHolder1_Location').value;

    if (address.length > 3) {
        $.ajax({
            type: "GET",
            url: "Geocode.aspx?location=" + address,
            dataType: "xml",
            success: function(xmlData) {
                $(xmlData).find('Result').each(function() {
                    document.getElementById('ctl00_ContentPlaceHolder1_Lat').value = $(this)[0].selectSingleNode('Latitude').text;
                    document.getElementById('ctl00_ContentPlaceHolder1_Long').value = $(this)[0].selectSingleNode('Longitude').text;
                    document.getElementById("locationspan").innerHTML = $(this)[0].selectSingleNode('Address').text + '<br />' + $(this)[0].selectSingleNode('City').text + '<br />' + $(this)[0].selectSingleNode('State').text;

                    var mapList = document.getElementById("divAddressSelector");
                    mapList.className = 'mapAddressSelectorHide';
                });
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert(XMLHttpRequest + '--' + textStatus + '--' + errorThrown);
            }
        });
    }
}

运行此代码会生成一个包含以下文本的文本框:undefinedparsererror--undefined

当我从地理编码页面创建 XML 文件并指向相反,jQuery 的 url 一切正常。

感谢您的任何帮助。

I am trying to write a simple location lookup call with jQuery and the yahoo maps service. i.e. A user puts a location into a search box and as they are tying jQuery calls a page on my site that returns the XML from yahoo.

Geocode.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    var url= "http://local.yahooapis.com/MapsService/V1/geocode?appid=SjCk7UjV34H0L9VoW5dFEXFGvsQuKX0xwIPNBX.rY8XxrWZbIYeSScFGuMrJyen_QwGKpLk-&location=" + Request.QueryString["location"];

    var oBuilder = new StringBuilder();
    var oStringWriter = new StringWriter(oBuilder);
    var oXmlReader = new XmlTextReader(url);
    var oXmlWriter = new XmlTextWriter(oStringWriter);
    while (oXmlReader.Read())
    {
        oXmlWriter.WriteNode(oXmlReader, true);
    }
    oXmlReader.Close();
    oXmlWriter.Close();
    Response.Clear();
    Response.Write(oBuilder.ToString()); 
    Response.Flush();
    Response.End(); 
}

Geocode.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Geocode.aspx.cs" Inherits="Search_Geocode" %>

My search page uses the following jQuery code to call this page:

function findAddress() {
    var address = document.getElementById('ctl00_ContentPlaceHolder1_Location').value;

    if (address.length > 3) {
        $.ajax({
            type: "GET",
            url: "Geocode.aspx?location=" + address,
            dataType: "xml",
            success: function(xmlData) {
                $(xmlData).find('Result').each(function() {
                    document.getElementById('ctl00_ContentPlaceHolder1_Lat').value = $(this)[0].selectSingleNode('Latitude').text;
                    document.getElementById('ctl00_ContentPlaceHolder1_Long').value = $(this)[0].selectSingleNode('Longitude').text;
                    document.getElementById("locationspan").innerHTML = $(this)[0].selectSingleNode('Address').text + '<br />' + $(this)[0].selectSingleNode('City').text + '<br />' + $(this)[0].selectSingleNode('State').text;

                    var mapList = document.getElementById("divAddressSelector");
                    mapList.className = 'mapAddressSelectorHide';
                });
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert(XMLHttpRequest + '--' + textStatus + '--' + errorThrown);
            }
        });
    }
}

running this code produces a text box with the following text: undefinedparsererror--undefined

When I create an XML file from my geocode page and point the url of the jQuery to that instead everything works properly.

Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

海拔太高太耀眼 2024-08-26 18:38:42

确保将 geocode.aspx 中的 Response.ContentType 设置为 text/xml

Make sure you are setting the Response.ContentType from geocode.aspx as text/xml.

我很OK 2024-08-26 18:38:42

告诉生成 xml 的页面将 contentType 作为“txt/xml”发送

Response.ContentType="text/xml";

Tell your page that generates the xml to send the contentType as "txt/xml"

Response.ContentType="text/xml";
白首有我共你 2024-08-26 18:38:42

好吧,经过几个小时的搜索,我终于找到了解决方案。问题出在 XML 的生成上。主要是 HTTP 状态代码和其他位。因此,对于其他正在寻找此类问题解决方案的人来说:

Geocode.aspx.cs 应该如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    var url= "http://local.yahooapis.com/MapsService/V1/geocode?appid=SjCk7UjV34H0L9VoW5dFEXFGvsQuKX0xwIPNBX.rY8XxrWZbIYeSScFGuMrJyen_QwGKpLk-&location=" + Request.QueryString["location"];

    var oBuilder = new StringBuilder();
    var oStringWriter = new StringWriter(oBuilder);
    var oXmlReader = new XmlTextReader(url);
    var oXmlWriter = new XmlTextWriter(oStringWriter);
    while (oXmlReader.Read())
    {
        oXmlWriter.WriteNode(oXmlReader, true);
    }
    oXmlReader.Close();
    oXmlWriter.Close();


    // Remove all headers and data in the Response.
    Response.Clear();
    //set the mime type
    Response.ContentType = "text/xml";
    // Buffer output and send it out in one chunk.
    Response.BufferOutput = true;
    // Specify a successful HTTP status code.
    Response.StatusCode = 200;

    Response.Write(oBuilder.ToString()); 
}

Well, after a few more hours of searching I have managed to find a solution. The problem was in the generation of the XML. Primarily HTTP status codes and other bits. So for anyone else looking for a solution to a problem like this:

Geocode.aspx.cs should look like this instead:

protected void Page_Load(object sender, EventArgs e)
{
    var url= "http://local.yahooapis.com/MapsService/V1/geocode?appid=SjCk7UjV34H0L9VoW5dFEXFGvsQuKX0xwIPNBX.rY8XxrWZbIYeSScFGuMrJyen_QwGKpLk-&location=" + Request.QueryString["location"];

    var oBuilder = new StringBuilder();
    var oStringWriter = new StringWriter(oBuilder);
    var oXmlReader = new XmlTextReader(url);
    var oXmlWriter = new XmlTextWriter(oStringWriter);
    while (oXmlReader.Read())
    {
        oXmlWriter.WriteNode(oXmlReader, true);
    }
    oXmlReader.Close();
    oXmlWriter.Close();


    // Remove all headers and data in the Response.
    Response.Clear();
    //set the mime type
    Response.ContentType = "text/xml";
    // Buffer output and send it out in one chunk.
    Response.BufferOutput = true;
    // Specify a successful HTTP status code.
    Response.StatusCode = 200;

    Response.Write(oBuilder.ToString()); 
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文