Avatar billede stephanryer Nybegynder
14. august 2006 - 11:42 Der er 36 kommentarer og
1 løsning

Ajax - Hvordan hentes XMLHttpRequest-objektet i FF

Jeg kan fint hente mit XMLHttpRequest-object i IE på følgende måde:

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

men når jeg prøver i FF virker det ikke.

Jeg har prøvet med følgende:

xmlHttp = new XMLHttpRequest();

og

xmlHttp = GetXMLHttpRequest();

Begge uden held. Håber jeg får svar - har kun 25 point.

På forhånd tak.
Avatar billede stephanryer Nybegynder
14. august 2006 - 11:58 #1
Jeg kan ikke få det her til at virke f.eks.: http://www.eksperten.dk/spm/624181
Avatar billede fennec Nybegynder
14. august 2006 - 11:59 #2
Tjek dette link:
http://www.w3schools.com/ajax/ajax_browsers.asp

Samt næste side for en komplet kode...
Avatar billede stephanryer Nybegynder
14. august 2006 - 12:02 #3
Ja, jeg har prøvet det her:

        function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}

Men kan ikke få det til at virke i FF.

Bruger Mozilla Firefox version 1.5.0.6
Avatar billede stephanryer Nybegynder
14. august 2006 - 12:07 #4
Ok jeg har fundet en fejl ved indsættelse af alerts i massevis. Det viser sig at Firefox brokker sig over følgende:

var sentence = document.getElementById("txtInput").getAttribute("value");

i IE er sentence sat til den indtastede text, men i FF er sentence null.

Hvordan kan jeg hente denne værdi ud, hvis getAttribute ikke virker?

Måske er det fordi jeg har et forkert antal parametre i getAttribute. Hvis dette er tilfældet, hvordan skal denne så se ud?
Avatar billede stephanryer Nybegynder
14. august 2006 - 12:10 #5
Det lader til at virker, når jeg ikke bruger getAttribute, så problemet er faktisk disse tre linier:

var sentence = document.getElementById("txtInput").getAttribute("value");
            var fucked = document.getElementById("chkFucked").getAttribute("checked");
            var mirror = document.getElementById("chkMirror").getAttribute("checked");
Avatar billede fennec Nybegynder
14. august 2006 - 12:20 #6
getAttribute er unødvendig:
var sentence = document.getElementById("txtInput").value;
var fucked = document.getElementById("chkFucked").checked;
Avatar billede fennec Nybegynder
14. august 2006 - 12:22 #7
Og du har husket at give elementerne et ID. Name er ikke nok (selvom IE kan finde ud af det):

<input type="Text" id="txtInput" name="txtInput" value="">
Avatar billede stephanryer Nybegynder
14. august 2006 - 12:23 #8
ja, bruger kun id. Mener name er udfaset i xhtml :) Tester det lige.
Avatar billede stephanryer Nybegynder
14. august 2006 - 12:25 #9
Ok nu virker det i både IE og FF

MEN

Har indstillet min intellisense til at overholde xhtml strict 1.1 og der indgår .value ikke som metode på det object, som returneres ved getElementById

Skyldes dette at .value er noget der er ved at blive udfaset, men som FF stadig benytter og at getAttribute er noget nyt, der skal erstatte dette og som FF endnu ikke overholder?
Avatar billede fennec Nybegynder
14. august 2006 - 12:58 #10
Det skal jeg desværre ikke kunne sige. Har aldrig brugt JS i xhtml, så jeg har aldrig undersøgt kode-standarden...

.o) <-- One Eyed Jack
Avatar billede stephanryer Nybegynder
14. august 2006 - 13:02 #11
Well tak for hjælpen ihvertfald.

http://ryer.dk/misc <- nu virker det :)
Avatar billede olebole Juniormester
14. august 2006 - 13:43 #12
<ole>

stephanryer >> Hvad mener du med:
    "... og der indgår .value ikke som metode på det object, som returneres ved getElementById"

Hvad gør du - og hvad sker der?  :)

/mvh
</bole>
Avatar billede stephanryer Nybegynder
14. august 2006 - 14:26 #13
Jeg gør sådan her:

var sentence = document.getElementById("txtInput").value;

men min intellisense (i Visual Web Developer) foreslår ikke value her, så jeg går ud fra at dette skyldes at jeg har sat den til at validere efter xhtml strict 1.1?
Avatar billede olebole Juniormester
14. august 2006 - 14:44 #14
XHTML1.1 er jo XML - ikke HTML. Derfor skal du bruge XML-DOM - og altså bruge 'setAttribute'/'getAttribute' ved alle attributter, der skal sættes/læses.

Spørgsmålet er så, om du overhovedet server dokumentet som XHTML. Formodentlig server du det som HTML - hvorved det ikke parses som XHTML, men som mere eller mindre tilfældig HTML-soup  ;o)

var sentence = document.getElementById("txtInput").getAttribute("value");

- bør dog virke i både IE og FF ... under både HTML4.01 og XHTML1.1. Du må lave andre fejl. Prøv med et link til siden  :)
Avatar billede olebole Juniormester
14. august 2006 - 14:45 #15
Avatar billede stephanryer Nybegynder
14. august 2006 - 14:49 #16
siden er http//ryer.dk/misc
Avatar billede stephanryer Nybegynder
14. august 2006 - 14:50 #17
btw - har læst dine artikler om xhtml - men tror du så det kan skyldes at jeg ikke har overholdt xhtml standarderne og iøvrigt ikke har angivet xhtml 1.1 strict i min doc?
Avatar billede stephanryer Nybegynder
14. august 2006 - 15:00 #18
Btw, kan jeg oprette en ny tråd med fx 50 point og så spørge dig om nogle xhtml-specifikke ting?
Avatar billede stephanryer Nybegynder
14. august 2006 - 15:03 #19
Er på 0 point pt, så jeg kan ikke lige oprette et nyt spg.

Hvor finder jeg et gyldigt applet-tag, der overholder strict 1.0?

Og hvis target er udfaset fra <a>-tag'et, hvordan angiver man så an man ønsker linket åbnet i et nyt vindue?
Avatar billede stephanryer Nybegynder
14. august 2006 - 15:08 #20
btw: getAttribute virker godt med "value", men i FF returnerer "checked" kun "checked":

var mirror = document.getElementById("chkMirror").getAttribute("checked");
alert(mirror);

IE viser: true / false
FF viser: checked / checked
Avatar billede stephanryer Nybegynder
14. august 2006 - 15:11 #21
og dette er kun hvis jeg i min checkbox har checked="checked"

ellers viser FF null ???
Avatar billede olebole Juniormester
14. august 2006 - 15:12 #22
Du skal ikke tænke på pointene  ;o)

1) Applet-elementet har været deprecated længe, men måske du kan implementere din applet med et object-element(?) - som jo er validt under XHTML1.0-Strict og 1.1.

2) <a href="side.html" onclick="window.open(this.href, '_blank');return false">Link</a>
Avatar billede olebole Juniormester
14. august 2006 - 15:13 #23
checked="checked" er den korrekte syntaks - så den bruger du bare  ;o)
Avatar billede stephanryer Nybegynder
14. august 2006 - 15:18 #24
1. Ok, vil undersøge det med object senere.

2. Virker fint :D

3. det med getAttribute på en chk-box er stadig problematisk i FF synes jeg.
Jeg har sørget for at den pågældende side kan 1.0 valideres.

(på wc3.org => http://validator.w3.org/check?uri=http%3A%2F%2Fryer.dk%2Fmisc)
Avatar billede olebole Juniormester
14. august 2006 - 15:21 #25
Sidder på en maskine uden FF, så jeg kan ikke lave en hurtig test. Prøver, når jeg kommer hjem  ;o)
Avatar billede stephanryer Nybegynder
14. august 2006 - 15:22 #26
tusind tak :)
Avatar billede stephanryer Nybegynder
14. august 2006 - 15:22 #27
Du skal lige være opmærksom på at min side ikke benytter getAttribute på nuværende tidspunkt. Jeg vil bare gerne have det til at virke, så jeg fremover kan nøjes med at bruge den metode.
Avatar billede olebole Juniormester
14. august 2006 - 15:29 #28
- men generelt er den korrekte syntaks under XHTML:
    <input id="myBox" type="checkbox" name="gnu" value="animal" checked="checked" />

- og i JS:
    var ch = document.getElementById("myBox").getAttribute("checked")
    alert(ch);

- og du sætter/fjerner den:
    var o = document.getElementById("myBox");

    // Sæt til checked:
    o.setAttribute("checked", "checked");

    // Sæt til 'unchecked':
    o.attributes.removeNamedItem("checked");
Avatar billede stephanryer Nybegynder
14. august 2006 - 15:41 #29
men stadig synes jeg det er iririterende at aflæsningen af checked afhænger af browseren. Nogen gange true / false, andre gange checked / ?

Hvad hedder det hvis man vil sætte den til "ikke-checked" ?
Avatar billede olebole Juniormester
15. august 2006 - 10:28 #30
Så gør du det stadig forkert. Under XHTML bruger du metoderne ovenfor:

    Check med: ELEMENT.setAttribute("checked", "checked");

    Test med: if (ELEMENT.getAttribute("checked")=="checked") alert("Is checked");

    Uncheck med: ELEMENT.attributes.removeNamedItem("checked");

True/false bruger du med JS under HTML-DOM  ;o)
Avatar billede thesurfer Nybegynder
15. august 2006 - 19:25 #31
Avatar billede stephanryer Nybegynder
15. august 2006 - 19:37 #32
Det er jo kun når du henter filen manuelt, den fucker up :)
Avatar billede thesurfer Nybegynder
15. august 2006 - 19:50 #33
if (normalSentence.length > 0)
{
// udfør kode
}
Avatar billede thesurfer Nybegynder
15. august 2006 - 19:51 #34
..højst sandsynligt (har ikke set din kode)..
Avatar billede stephanryer Nybegynder
15. august 2006 - 19:59 #35
nej, det er

if(normalSentence != null)
{
//udfør kode
}

Men stadig så er det jo ikke nogen side som er beregnet til at køres manuelt, så kan ikke se problemet. Når den kaldes via JS bliver den jo kaldt med GET-variabler.
Avatar billede thesurfer Nybegynder
15. august 2006 - 20:10 #36
Of course.. det er jo et objekt.. :-)

Man kan jo godt fixe småting, selv om det ikke er nødvendigt.. :-)

Men måske er det bare mig... :-)
God aften.
Avatar billede stephanryer Nybegynder
15. august 2006 - 20:44 #37
Har fikset det for din skyld :)

http://ryer.dk/misc/fuckthisup.aspx
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