Avatar billede dennism Nybegynder
08. marts 2007 - 12:16 Der er 22 kommentarer og
1 løsning

JavaScript: Hente fra XML-fil?

Jeg er ved at lave et system, hvor folk kan indtaste en adresse og systemet saa gerne skulle koordinaterne til Google Maps via en request som denne:

http://geo.localsearchmaps.com/?street=25+Helsingforsgade&city=%C5rhus&country=DK&format=json&google2=1

Det den returnerer skulle efter signe vaere et JSON-objekt. Er der nogen der kan fortaelle mig, hvordan jeg I et JavaScript kan hente "lat" og "long" fra denne request ind som variabler i JavaScript?
Avatar billede roenving Novice
08. marts 2007 - 13:36 #1
Meget simpelt, da det jo netop kan gøres til et javascript-objekt ...

<script language="Javascript">
function getXmlHttpObject() {
  try{
    xmlHttp = new XMLHttpRequest();
  }catch(e){
    try{
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return xmlHttp;
}
function retrieveData(url){
  var xmlHttp = getXmlHttpObject();
  if(xmlHttp){
    xmlHttp.open("GET",url,true);
    xmlHttp.send();
    xmlHttp.onreadystatechange = function(){
      if (xmlHttp.readyState == 4){
        return eval(xmlHttp.responseText);
      }
    }
  }
}
function getCoords(f){
  var url = "http://geo.localsearchmaps.com?street=" + encodeURIComponent(f.vejnummer.value) + "+" + encodeURIComponent(f.vejnavn.value) + "&city=" + encodeURIComponent(f.by.value) + "&country=DK&format=json&google2=1";
  var data = retrieveData(url);
  document.getElementById("Laengde").firstChild.nodeValue = data.lat;
  document.getElementById("Bredde").firstChild.nodeValue = data.long;
}
</script>
Avatar billede roenving Novice
08. marts 2007 - 13:38 #2
Absolut utestet og første gang, jeg har skrevet noget ajax-noget selv, men koden er selvfølgelig planket i det allermeste !-)
Avatar billede softspot Forsker
08. marts 2007 - 13:38 #3
Hvis du har selve funktionaliteten til at hente data fra den nævnte URL, så kan du få det omsat til et javascript-objekt ved at udføre flg. kode:

var obj = eval("(" + googlejson + ")");

og så kan du hente data ved at referere felterne direkte

var breddegrad = obj.lat;
var laengdegrad = obj.long;
Avatar billede roenving Novice
08. marts 2007 - 13:48 #4
Nå, ja, jeg glemte de der ekstra paranteser ...
Avatar billede dennism Nybegynder
08. marts 2007 - 13:51 #5
Jeg har forsøgt at arbejde lidt videre på dette, men har et problem med denne kode:

<script language="Javascript">

function getXmlHttpObject() {
  try{
    xmlHttp = new XMLHttpRequest();
  }catch(e){
    try{
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return xmlHttp;
}
function retrieveData(url){
  var xmlHttp = getXmlHttpObject();
  if(xmlHttp){
    xmlHttp.open("GET",url,true);
    xmlHttp.send();
    xmlHttp.onreadystatechange = function(){
      if (xmlHttp.readyState == 4){
        return eval(xmlHttp.responseText);
      }
    }
  }
}
function getCoords(){
  var url = "http://geo.localsearchmaps.com/?street=25+Helsingforsgade&city=%C5rhus&country=DK&format=json&google2=1";
  var data = retrieveData(url);
 
  alert(data.lat+"x"+data.long);
}

getCoords();
</script>

Jeg får denne error af Firefox:
Error: uncaught exception: Permission denied to call method XMLHttpRequest.open

Håber I kan hjælpe?
Avatar billede roenving Novice
08. marts 2007 - 15:22 #6
-- og Opera sender en Security violation ...

-- hrm, w3c har følgende på sin Working Draft-side om dette objekt:

'When a non same-origin url argument is given user agents should throw a SECURITY_ERR exception.'

-- og det er skrevet af en fra Opera Software ASA ...
Avatar billede dennism Nybegynder
08. marts 2007 - 15:33 #7
Der er her på eksperten skrevet en artikel om JSON, hvis jeg kører den kode der står deri, får jeg samme fejl:
http://www.eksperten.dk/artikler/1053

Hvad er det problemet er?
Avatar billede sw_red_6 Nybegynder
08. marts 2007 - 15:38 #8
det er samme problemstilling som dit eget script, som roenving også forklarer årsagen til..

Du kan ikke bruge AJAX på tværs af domæner uden at den kommer med en fejl-besked
Avatar billede dennism Nybegynder
08. marts 2007 - 16:03 #9
Hvordan pokkers får jeg så den fil hentet ned? :(
Avatar billede sw_red_6 Nybegynder
08. marts 2007 - 16:07 #10
du kunne prøve med noget serverside script som henter filen og sender den til dit AJAX-script..
Avatar billede dennism Nybegynder
08. marts 2007 - 16:49 #11
Er det nogen der har et bud på, hvordan jeg kan klare det? :(
Avatar billede roenving Novice
08. marts 2007 - 17:03 #12
Gør som sw_red_6 foreslår, for serveren må gerne slå op !-)
Avatar billede softspot Forsker
08. marts 2007 - 17:17 #13
Det afhænger af hvilket serversprog du benytter. Med ASP og ved brug af VBScript, kan det være denne her kan hjælpe dig:

addr = "---DIN GOOGLE ADRESSE---"
set objSvrXML = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
objSvrXML.open "get", addr, false
objSvrXML.send
strResult = objSvrXML.responseText
set objSvrXML = nothing

response.write strResult

og så burde du kunne bruge det samme script som roenving præsenterede dig for tidligere (husk den lille rettelse med paranteserne i kaldet til eval).

Adressen på klienten skal så naturligvis pege på din egen asp-side og ikke google.
Avatar billede dennism Nybegynder
08. marts 2007 - 17:23 #14
softspot >>

Har du mod på at lave det samme stykke kode i PHP?
Avatar billede softspot Forsker
08. marts 2007 - 17:29 #15
Kan jeg ikke. Jeg fatter ikke PHPsk :)
Avatar billede roenving Novice
08. marts 2007 - 17:34 #16
-- husk også at angive, at det er mime-type application/json i headeren !-)
Avatar billede dennism Nybegynder
08. marts 2007 - 17:37 #17
Jeg kan ikke finde nogle howto's på nettet med Ajax i PHP. Nogen der kan hjælpe mig?
Avatar billede dennism Nybegynder
08. marts 2007 - 17:51 #18
Roenving >>

Har du et bud på det? :)
Avatar billede roenving Novice
08. marts 2007 - 18:10 #19
-- jeg har ikke arbejdet nok med php til at skrive en kode til dig ...

-- men jeg vil da gætte på, at du i php-kategorien kan finde nogle gode eksempler !-)

-- måske er det bare http://dk.php.net/manual/en/function.http-request.php du skal have fat i ?-)

En vej til at finde noget kan være:

http://www.google.dk/search?hl=da&q=site%3Aeksperten.dk+php+httprequest&meta=

F.eks. http://www.eksperten.dk/spm/692572

-- og deri:

http://www.tutorialized.com/tutorials/Javascript/AJAX/1

F.eks.

http://www.tutorialized.com/tutorial/Load-content-from-PHP-script-using-AJAX-Easy-Guide/23203
Avatar billede dennism Nybegynder
08. marts 2007 - 19:59 #20
Så lykkedes det mig at få noget til at køre!

Må jeg bede om et svar, roenving? :)
Avatar billede roenving Novice
08. marts 2007 - 20:08 #21
Velbekomme '-)
Avatar billede roenving Novice
08. marts 2007 - 20:35 #22
-- og tak for point ;~}
Avatar billede dennism Nybegynder
08. marts 2007 - 20:59 #23
Mig der takker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester