Frage

Ich versuche, eine einfache Lage Lookup-Aufruf mit jQuery zu schreiben und die Yahoo-Karten-Service. d Ein Benutzer legt einen Ort in ein Suchfeld und wie sie jQuery ruft eine Seite auf meiner Website, dass die Renditen der XML von Yahoo sind zu binden.

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" %>

Meine Suchseite verwendet die folgende jQuery-Code diese Seite aufzurufen:

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

Ausführen dieses Codes erzeugt ein Textfeld mit dem folgenden Text: undefinedparsererror - undefined

Wenn ich eine XML-Datei von meiner geocode Seite erstellen und die URL der jQuery, dass stattdessen alles Punkt funktioniert.

Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung 3

Nun, nach ein paar Stunden der Suche Ich habe es geschafft, eine Lösung zu finden. Das Problem war in der Erzeugung der XML. In erster Linie HTTP-Statuscodes und andere Bits. Also für alle anderen für eine Lösung für ein Problem wie folgt aussehen:

Geocode.aspx.cs sollte wie folgt statt aussehen:

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

Andere Tipps

Stellen Sie sicher, dass Sie die Response.ContentType von geocode.aspx als text/xml setzen.

Lassen Sie Ihre Seite, die die XML generiert die content als „txt/xml“ senden

Response.ContentType="text/xml";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top