Question

Je suis en train d'écrire simple appel emplacement de recherche avec jQuery et le service de cartes de Yahoo. à savoir Un utilisateur met un emplacement dans une zone de recherche et comme ils accaparent jQuery appelle une page sur mon site qui renvoie le XML de 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" %>

Ma page de recherche utilise le code jQuery suivant pour appeler cette 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);
            }
        });
    }
}

exécuter ce code produit une zone de texte avec le texte suivant: undefinedparsererror - Non défini

Lorsque je crée un fichier XML de ma page géocodage et point l'url de la jQuery pour que tout fonctionne correctement à la place.

Merci pour toute aide.

Était-ce utile?

La solution 3

Eh bien, après quelques heures de recherche, je suis parvenu à trouver une solution. Le problème était dans la génération du XML. Principalement des codes d'état HTTP et les autres bits. Donc, pour tous ceux qui cherchent une autre solution à un problème comme celui-ci:

Geocode.aspx.cs devrait ressembler à ceci:

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

Autres conseils

Assurez-vous que vous définissez la Response.ContentType de geocode.aspx comme text/xml.

Dites à votre page qui génère le code XML pour envoyer le contentType comme "txt/xml"

Response.ContentType="text/xml";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top