Avatar billede toppus Nybegynder
06. juni 2008 - 12:28 Der er 25 kommentarer og
1 løsning

httpxml i javascript (har det i asp)

Hejsa alle
Jeg kunne godt bruge noget hjælp til httpxml.
I google maps henter jeg nogle kordinater som jeg skal ha' sendt til en side, som så retunere en xml fil som så inde holder bl.a. en højde i meter.
Jeg har forsøgt med mange af disse javascript httpxml men kan ikke få det til at virke. I asp fandt jeg noget der virker men da man ikke kan få javascript variabler over i asp er jeg lost.

ASP:
Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
Set objXMLDOM = Server.CreateObject("Microsoft.XMLDOM")
objXMLDOM.async = false
Call objXMLHTTP.Open("GET", "http://www.earthtools.org/height/55.60377/11.69920", False)
objXMLHTTP.Send

Set objXMLDOM = objXMLHTTP.ResponseXML

Set root = objXMLDOM.documentElement
Redim mitarr(11,11)
    For i = 2 To (root.childNodes.length - 2)
  'Response.Write root.childNodes.Item(i).TagName &"<br>"
   
          For e = 0 to (root.childNodes(i).childNodes.length - 1)
                  if root.childNodes.Item(i).childNodes.Item(e).Text<>"" Then
                    treg= root.childNodes.Item(i).childNodes.Item(e).Text
                    minvar=root.childNodes.Item(i).childNodes.Item(e).Text &"<br>"
                Else
                    'Response.Write "0" &"<br>"
                    minvar="0" &"<br>"
                End if
                mitarr(e,i)=minvar
                minvar=""
          Next
    Next

Set objXMLHTTP = Nothing
Set objXMLDOM = Nothing
De kordinater som står i teksten (55.60377/11.69920) skulle jeg gerne kunne indsætte via variable (latLngStr)
Det eneste jeg skal bruge fra xml filen er det der står i meters
som en variable
Nogle der kan hjælpe???
Avatar billede olebole Juniormester
06. juni 2008 - 15:16 #1
<ole>

På klienten kan du ikke lave XMLHttpRequests mellem forskellige domæner, så det kan du ikke løse på den måde  =)

/mvh
</bole>
Avatar billede toppus Nybegynder
06. juni 2008 - 15:44 #2
Øhh nu er jeg ikke lige med:)
Det eneste jeg beder om hjælp til er at lave et XMLHttpRequests via javascript, og så hive den ene childNode ud.
Det virker fint med ovenstående asp kode, men da leverings variablerne kommer fra javascript via google maps, så kan jeg jo ikke få det til at forgå automatisk i asp
Avatar billede olebole Juniormester
06. juni 2008 - 16:09 #3
Jeg ved godt, hvad det er, du beder om hjælp til. Jeg ved også godt, det fungerer med ASP. Netop derfor understreger jeg, det kan fungere uden ASP ... du kan ikke gøre det samme med JavaScript og XMLHttpRequests.

Af sikkerhedsgrunde kan du ikke fra klienten lave XMLHttpRequests mellem to forskellige domæner. Har du et dokument liggende på www.domainA.dk og det loades i en browser, kan dette dokument ikke kalde et dokument på www.domainB.dk  =)
Avatar billede olebole Juniormester
06. juni 2008 - 16:10 #4
Hov, der manglede et 'ikke' - uden hvilket sætningen ikke giver mening  :D
    "Netop derfor understreger jeg, det ikke kan fungere uden ASP"
Avatar billede olebole Juniormester
06. juni 2008 - 16:12 #5
Avatar billede toppus Nybegynder
06. juni 2008 - 16:26 #6
Nååååå  ok :), jammen så må jeg jo til at opfinde den dybe.... øv
Det jeg så havde tænkt mig var at smide java variablerne ind i asp via href eller noget i den stil.
Har du en go' ide til hvordan jeg ellers komme videre?
Avatar billede olebole Juniormester
06. juni 2008 - 16:41 #7
Du kunne lave proxy-løsning ... en XMLHttpRequest til et dokument på din egen server, som derefter retter en request til den fremmede server - og sender resultatet retur til klienten
Avatar billede toppus Nybegynder
06. juni 2008 - 16:54 #8
Ja kan godt se at det er en løsning på det...
kunne du lave et simpelt XMLHttpRequest som sender til "modtag.asp"
og modtager alt i en variable (modtag)???
Avatar billede olebole Juniormester
06. juni 2008 - 17:15 #9
Jeg har lavet et par eksempler i denne tråd:
    http://www.eksperten.dk/spm/817625

Det handler godtnok om PHP, men det skulle være muligt at konvertere uden de store problemer  =)
Avatar billede toppus Nybegynder
06. juni 2008 - 18:13 #10
Hmmm fatter intet php, men en lille smule javascript.. er det nødvendigt at jeg skal bruge 2 filer (js)?.. Det eneste der står i den asp fil som bliver sendt tilbage, er et tal, så jeg skal vel ikke parse den vej ??
Kan du ikke komme med et udspil på en enkelt fil , jeg er sq lidt lost når det ikke er asp :)
Avatar billede olebole Juniormester
06. juni 2008 - 19:38 #11
Du kan kalde en ASP-fil på din server på denne måde:

<script type="text/JavaScript">
(function(){if(window.XMLHttpRequest)return;var o=null,s,a=["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0,j=a.length;i<j;s=a[i],i++){try{if(o=new ActiveXObject(s))break}catch(e){}}window.XMLHttpRequest=o?function(){return new ActiveXObject(s)}:null;o=null})()

function AjaxReq(sMethod, sUrl, oVars, fnCallBack) {
    var oHttp = new XMLHttpRequest();
    oHttp.open(sMethod, sUrl, true);
    oHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
    oHttp.onreadystatechange = _fnCallBack;
    var aQuery = [];
    for (var x in oVars) aQuery.push( encodeURIComponent(x) + "=" + encodeURIComponent(oVars[x]) );
    oHttp.send( aQuery.join("&") );
    aQuery = null;
   
    function _fnCallBack() {
        if (oHttp.readyState<4) return;
        fnCallBack(oHttp);
        oHttp = null;
    }
    return this;
}

function handleResponse(oHttp) {
    alert(oHttp.responseText)
}

AjaxReq("get", "http://www.dit-domain.dk/sti/til/fil.asp", null, handleResponse);
</script>
Avatar billede olebole Juniormester
06. juni 2008 - 19:41 #12
Du skal så i filen 'fil.asp' kalde filen på den anden server. Det, den anden server returnerer, skrives ud i 'fil.asp'. JS-funktionen alert'er så det, der står i 'fil.asp'.

Prøv at få det til at fungere først  =)
Avatar billede toppus Nybegynder
06. juni 2008 - 21:17 #13
Det virker perfekt, den henter som det fra og asp filer gør også det den skal.
Så er der bare at få skrevet det på siden i stedet for denne alert.
Avatar billede toppus Nybegynder
06. juni 2008 - 21:18 #14
Det virker perfekt, den henter som den skal, og asp filen gør også det den skal.
Så er der bare at få skrevet det på siden i stedet for denne alert.
Avatar billede olebole Juniormester
07. juni 2008 - 14:29 #15
Forudsat, du har et div, som ser sådan ud:
    <div id="mitDiv">&nbsp;</div>

- kan du ændre callback funktionen til:

function handleResponse(oHttp) {
    var nHeight = oHttp.responseXML.getElementsByTagName("meters")[0].firstChild.nodeValue;
    document.getElementById("mitDiv").firstChild.nodeValue = nHeight + " meter";
}

Det er vigtigt, at der er et '&nbsp;' i div'et - og det ikke er tomt. Ellers har det ikke et firstChild. Undlad også linjeskift i div'et. Skriv det på én linje, som jeg har gjort - ellers opstår der flere childNodes i visse browsere.
Avatar billede olebole Juniormester
07. juni 2008 - 14:36 #16
Forklaringen:

*) oHttp.responseXML - repræsenterer det XML-dokument, serveren returnerer

*) oHttp.responseXML.getElementsByTagName("meters")[0] - returnerer det første element i XML-dokumentet, som har nodeName (tagName): 'meters'

*) I DOM er alt noder - også tekst. Derfor skal vi ind og have fat i elementets tekstnode (elementets 'firstChild') og finde værdien af den:
    var nHeight = oHttp.responseXML.getElementsByTagName("meters")[0].firstChild.nodeValue;

Sidste linje i funktionen burde nu sige sig selv. Håber, det var forklaring nok - ellers spørger du bare videre  =)
Avatar billede olebole Juniormester
07. juni 2008 - 14:38 #17
- og for at andre interesserede brugere lettere får noget ud af forklaringerne, ser XML-dokumentet sådan ud:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<height xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.earthtools.org/height.xsd">
    <version>1.0</version>
    <location>
        <latitude>55.60377</latitude>
        <longitude>11.69920</longitude>
    </location>
    <meters>47</meters>
    <feet>154.2</feet>
</height>
Avatar billede olebole Juniormester
07. juni 2008 - 14:40 #18
PS: Da XML-dokumentet er kodet som iso-8859-1 bør du også bruge dette tegnsæt i dit eget dokument - ligesom du bør rette header'en i Ajax scriptet:
    oHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=iso-8859-1");
Avatar billede toppus Nybegynder
07. juni 2008 - 16:44 #19
Du er bare såååå god :)
Jeg takker for din store indsats, og regner med at du lige smider et svar.
Forsat go' weekend
Avatar billede toppus Nybegynder
07. juni 2008 - 16:45 #20
Men under mig stadig over at det ikke kan gøres via javascript alene :(
Avatar billede olebole Juniormester
07. juni 2008 - 17:05 #21
Selvtak. Indenfor JavaScript har 'Policy of Same Origin' langt større vigtighed end buddet 'Du må ikke slå ihjel' har indenfor Kristendommen (kristne vælger jo alligevel regeringer, som ingen skrupler har i dén retning). Derfor har du ikke mulighed for at rette forespøgslen til det andet domæne med JS alene  =)
Avatar billede mclemens Nybegynder
07. juni 2008 - 17:56 #22
Lettere OT, men for at nævne hvordan man kan få JS til at virke:

En af måderne du kan omgå sikkerheden i IE er ved at tilføje
websiten der udfører forespørgslen til listen over betroede
sites - så hvis man f.eks. skulle bruge det til eget formål
kan man i IE tilføje f.eks. exp.dk til listen og så installere
gm4ie og ved load af siden køre et javascript der indsætter en
dynamisk forespørgsel på den viste exp side til f.eks. check om
det er en bruger du kender eller ej der stiller spørgsmålet og
så få svaret retur til den viste exp side og håndtere resultatet
dynamisk. Jeg benytter denne fremgangsmåde dagligt - dog ikke på
Exp, men ved bestilling af varer fra en leverandør (checker dynamisk pris
og lagerstatus mellem min og deres side når jeg surfer rundt på siden ...)

- Man kan selvfølgelig altid omgå sikkerheden til at sende fra et domæne til
et andet hvis man har adgang til at indsætte javascript på siden ved at oprette
et img element med src til f.eks. et php script med escaped document.cookie.
Man kan så ikke få et svar retur udover width og height på billeder men resultatet
bliver sendt ... Af denne årsag bliver javascript heldigvis ikke tilladt på
mange community sites. (xss exploit risk)
Avatar billede mclemens Nybegynder
07. juni 2008 - 17:57 #23
(at få folk til at tilføje sitet til betroet er så ikke så
let/automatisk, så del 1 af ovenstående er mest til eget brug)
Avatar billede toppus Nybegynder
07. juni 2008 - 18:14 #24
Ja man lærer hverdag.. :)
Avatar billede renelyd Nybegynder
12. juni 2008 - 10:39 #25
den med at ,ganske enkelt tilføje sitet under,tillid til..kan man komme langt med
mvh RENE h
Avatar billede olebole Juniormester
12. juni 2008 - 23:49 #26
- men stadig kun, hvis det er til internt brug  =)
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



IT-JOB

Cognizant Technology Solutions Denmark ApS

Sr. Test Analyst

Danske Spil A/S

Erfaren UI Designer