2010-01-29 6 views
0

J'essaye d'écrire un appel simple de recherche d'emplacement avec jQuery et le service de cartes de yahoo. C'est-à-dire qu'un utilisateur place un emplacement dans une zone de recherche et jQuery appelle une page sur mon site qui renvoie le code XML de yahoo.jQuery lire l'erreur 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" %> 

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 - undefined

Lorsque je crée un fichier XML à partir de ma page de géocodage et que j'indique l'URL du fichier jQuery, tout fonctionne correctement.

Merci pour toute aide.

Répondre

0

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 de statut HTTP et d'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()); 
} 
1

Assurez-vous que vous définissez le Response.ContentType à partir de geocode.aspx en tant que text/xml.

0

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

Response.ContentType="text/xml";