jqueryxmlyahoo-maps

jQuery read xml error


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.


Solution

  • 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()); 
    }