Avatar billede htm Nybegynder
12. november 2004 - 10:05 Der er 9 kommentarer og
1 løsning

Hente indhold fra anden side

Hej

Hvordan kan jeg læse indholdet af en anden webside ind i en javascript variabel ?

Det er min egen side, så der er ikke copyright problemer :-)

Skal bruge det til at hente info fra en anden side og så udfylde nogle felter med det.
Avatar billede olebole Juniormester
12. november 2004 - 12:49 #1
<ole>

Hvad er det mere præcist, du skal lave? Det er nok mest sikkert at lave det på serveren - men det er lidt svært at sige  :)

/mvh
</bole>
Avatar billede htm Nybegynder
12. november 2004 - 13:05 #2
når jeg trykker på en knap skal den hente noget info fra en serverside som så skal lægges ned i en js-variabel som jeg kan bruge.

eks kan jeg forespørge side.php?id=5 så får jeg de data fra DB vist på den side.

eks "vare","pris"

denne streng ville jeg gerne have ind i en js-variabel.

Kan dog lige sige at jeg har løst det aktuelle problem med noget iframesnask ;-)  - men er stadig interesseret i at høre om det kan lade sig gøre ?
Avatar billede olebole Juniormester
12. november 2004 - 17:55 #3
Du kan lave et PHP-dokument, der ser sådan ud:

<?
if ( isset($_GET["type"]) && $_GET["type"]=="moz" ) {
    Header("Content-Type: text/xml");
    print "bla=noget om id: ".$_GET["id"]."&blabla=noget andet om id: ".$_GET["id"];
} else {
    print "myVars['bla']='noget om id: ".$_GET["id"]."';";
    print "myVars['blabla']='noget andet om id: ".$_GET["id"]."';";
    print "myFunc();";
}
?>

Så kan du lave et HTML-doku, der ser sådan ud:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>TITLE</title>
<script id="myData" type="text/JavaScript"></script>
<script type="text/JavaScript">
var myVars = new Array();
function myFunc(var1, var2) {
    alert(myVars["bla"] + "\n" + myVars["blabla"])
}
function getMyData(id) {
    var url, req, aTmp, aVars;
    url = "dataDoc.php?id=" + id;
    try {
        req = new XMLHttpRequest();
        url += "&type=moz";
        req.open("GET", url, false);
        req.send(null);
       
        aTmp = req.responseText.split("&");
        for (i=0; i<aTmp.length; i++) {
            aVars = aTmp[i].split("=");
            myVars[aVars[0]] = aVars[1];
        }
        myFunc();
    }
    catch(e) {
        url += "&u=" + new Date().getTime();
        document.getElementById("myData").src = url;
    }
}
</script>
</head>
<body>

<button onclick="getMyData(5)">TEST</button><br>
<button onclick="getMyData(8)">TEST 2</button>

</body>
</html>

Gecko-baserede browsere kan ikke så godt loade JS-filer ind i et JS-tag. Derfor opretter vi i dem et XMLhttpRequest objekt og henter filen med det. Derefter splitter vi request-objektets returnerede 'responseText' og fylder vores variabler ned i variabel-array'et 'myVars' - for til sidst at kalde funktionen, der skal lave noget med de hentede variabler (i eksemplet her: alert'e dem ud).

Er der ikke tale om en Gecko, kan vi sætte en ny source på JS-tag'et - og lade den loadede JS-fil selv lægge variablerne i 'myVars'.

Opera vil ikke afvikle JS fra filen anden gang den samme URI loades i JS-tag'et. Dvs, hvis vi sender den samme query-streng to gange i træk (samme id). Derfor laver jeg det lille trick med at sætte en ekstra variabel 'u' på URL'en. Den indeholder et timestamp med millisekunder - og gør dermed URI'en unik.

Grunden til at myFunc() kaldes i JS-filen er, at ellers ved vi ikke, hvornår variablerne i 'myVars' er nået at blive opdateret.
Er der tale om en XMLhttpRequest, kan vi lade den 'hænge', indtil der kommer noget retur fra serveren. Det afgøres af 'false' i linien:
  req.open("GET", url, false);

Når der er sendt, bliver JS hængende og afventer svar fra serveren, før den går videre, hvorfor vi kan tillade os at kalde funktionen lige efter.

Spørg, hvis der er noget, du ikke forstår  :)
Avatar billede olebole Juniormester
12. november 2004 - 17:57 #4
Funktionen myFunc() tager inegn argumenter ... det var en fejl  :)

function myFunc() {
    alert(myVars["bla"] + "\n" + myVars["blabla"])
}
Avatar billede htm Nybegynder
12. november 2004 - 18:55 #5
woow - det virker jo perfekt :-)

Har dog lige et par spørgsmål:
1. er XMLHttpRequest() en funktion der kun er understøttet i mozilla og lign? for det ser ud til at IE returnerer et exception og hopper ned i din catch ?
2. Har du et link til dokumentationen af XMLHttpRequest() - med proberties og method etc.
3. Skal det være et xml dokument der hentes ? kan se du smider en xml header på ?
Avatar billede olebole Juniormester
12. november 2004 - 19:10 #6
I IE kan du bruge noget à la:

var req = new ActiveXObject("Msxml2.XMLHTTP")
req.Open("GET", url, false);
req.Send();
alert(req.responseText);

Det er bare to forskellige implementeringer af XMLhttpRequest. Hvis der vitterligt er tale om XML, bør du bruge 'req.resonseXML', som returnerer en XML-DOM. Her returnerer jeg ikke XML, så derfor bruger jeg blot tekst-repræsentationen 'responseText'.

Opera kan ikke den slags, hvorfor du bliver nødt til at have JS-modellen med  :o|

Du kan sikkert finde lidt mere her:
  http://www.w3schools.com/xml/xml_http.asp
... og:
  http://search.microsoft.com/search/results.aspx?view=msdn&st=b&na=82&qu=xmlhttprequest&s=1&swc=4

... og 'Google Is Your Friend'  ;o)
Avatar billede htm Nybegynder
12. november 2004 - 19:28 #7
ok - det lyder meget fornuftigt.

Jeg googler lidt ;-)

Men fik ikke lige svar på om det skulle din xml header med ? :-)

Smider du ikke også lige et svar ?
Avatar billede olebole Juniormester
12. november 2004 - 19:41 #8
Teknikken bruges normalt til XML - men jeg tror ikke Moz accepterer filen, hvis ikke XML-headeren bliver sat.

Uden headeren accepteres et PHP-dokument ikke som et XML-dokument i Moz. Nu bruger vi godt nok ikke XML-DOM - men for en sikkerheds skyld tog jeg den med.
Du kan jo prøve at slette den og se, om det virker ... jeg ville nu nok tage den med under alle omstændigheder  :)
Avatar billede htm Nybegynder
12. november 2004 - 19:58 #9
he he ok :-)

har skam prøvet og slette den uden et havde en ændring - derfor ville jeg lige høre ad en gang :-)

Tak for hjælpen
Avatar billede olebole Juniormester
12. november 2004 - 20:47 #10
... anytime, htm  ;o)
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