Avatar billede superbent Nybegynder
01. november 2008 - 13:43 Der er 8 kommentarer og
1 løsning

Simpelt AJAX script virker i IE men ikke Firefox

Hej

Jeg er helt ny til alt dette AJAX, men har prøvet at lave følgende:

<script language="javascript" type="text/javascript">
function XmlObject() {
  var obj = null;
  try {obj = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch(e) {
  try {obj = new ActiveXObject("Microsoft.XMLHTTP"); }
    catch(oc) {obj = null;}
  }
  if (!obj && typeof XMLHttpRequest != "undefined") {
    obj = new XMLHttpRequest();
  }
  return obj;
}

function GoGetIt(indtastning)
{
var oXMLHttp = XmlObject();

if (oXMLHttp.readyState != 0) {
  oXMLHttp.abort();
}

oXMLHttp.open("GET", "index.php?input=" + indtastning, true);
oXMLHttp.send(null);

if (oXMLHttp.readyState == 4 && oXMLHttp.status == 200) {
  document.getElementById("someResult").value=oXMLHttp.responseText;
} else {
  document.getElementById("someResult").value='Ikke klar...';
}
}
</script>

<form id="form1" runat="server" method="get">
<input type="text" id="someText" name="someText" onblur="GoGetIt(this.value);" />
<input type="text" id="someResult" name="someResult" />
</form>


I Firefox skriver den hele tiden "Ikke klar" - jeg kan slet ikke få den til at virke i Firefox overhoved.

I Internet Explorer, virker den nogen gange... det er som om at hvis man er for hurtig til at teste feltet ved at skrive noget, og trykker væk fra feltet, så skriver den "Ikke klar" men ellers KAN de godt vise det ønskede data, hvis man ikke er for hurtig.


Er der nogen der kan hjælpe med at få den til at virke ordenligt i Firefox og Internet Explorer, og evt. fortælle om jeg laver nogen dumme fejl.
Avatar billede roenving Novice
01. november 2008 - 13:51 #1
Nej, og det er helt klart, da du kun forsøger at få fat i forældede udgaver af M$-proprietære activeX-objekter !-)

-- prøv at bruge oleboles xmlHTTPRquest-wrapper: http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php !o]
Avatar billede superbent Nybegynder
02. november 2008 - 17:06 #2
Tak roenving, jeg har nu læst siden m.v. og efter jeg har redigeret min kode efter oleboles anbefalinger, kan jeg stadig ikke få den til at fungere i FF men den virker i IE som den er lige nu. Jeg har ikke slået javascript fra i min FF browser hvilket man kunne begynde at tænke.


Hvis du vil være så venlig at se om du kan gennemskue en fejl? (skal lige siges at FF ikke giver fejl i den indbyggede "Fejlkonsol", så kan ikke hitte ud af eventuel fejl...


<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; i++) {
        s=a[i];
        try {
            if (o==new ActiveXObject(s))  break;
        }
        catch(e){};
    }
    window.XMLHttpRequest = o ? function(){return new ActiveXObject(s)} : null;
    o = null;
})();

</script>
<script language="javascript" type="text/javascript">
function myCallBack(oHttp) {
    if (oHttp.readyState<4) return;
    // Gør noget fornuftigt med responsen her (kode udeladt)
    oHttp = null;
}

function GoGetIt(indtastning) {
    var oXMLHttp = new XMLHttpRequest();
   
    oXMLHttp.open("get", "test.php?inputtekst=" + indtastning, true);
    oXMLHttp.onreadystatechange = function(){ myCallBack(oXMLHttp) };
    oXMLHttp.send(null);

    if (oXMLHttp.readyState == 4 && oXMLHttp.status == 200) {
        document.getElementById("someResult").value=oXMLHttp.responseText;
    } else {
        document.getElementById("someResult").value='readyState er: ' + oXMLHttp.readyState;
    }
}
</script>

<form id="form1" runat="server">
<input type="text" id="someText" name="someText" onblur="GoGetIt(this.value);" />
<input type="text" id="someResult" name="someResult" />
</form>


test.php indeholder kun følgende:
<?php
if ($_GET['inputtekst']) {
    echo $_GET['inputtekst'];
    exit;
}
?>
Avatar billede roenving Novice
02. november 2008 - 17:53 #3
Det skal vel være:

function myCallBack(oHttp) {
    if (oHttp.readyState<4) return;
    if(oHttp.status == 200){
        document.getElementById("someResult").value=oHttp.responseText;
    } else {
        document.getElementById("someResult").value='Status er: ' + oHttp.status;
    }
    oHttp = null;
}

function GoGetIt(indtastning) {
    var oXMLHttp = new XMLHttpRequest();
   
    oXMLHttp.open("get", "test.php?inputtekst=" + indtastning, true);
    oXMLHttp.onreadystatechange = function(){ myCallBack(oXMLHttp) };
    oXMLHttp.send(null);
}
</script>
Avatar billede superbent Nybegynder
02. november 2008 - 19:09 #4
Hej - Tak, nu har jeg rettet scriptet til, og ændret til POST i stedet for GET som olebole er fortaler for. Men jeg kan intet resultat få fra IE eller FF nu.


Hvis du prøver at køre scriptet jeg har lavet selv, kan du se det. test.php indeholder kun følgende:
if ($_POST['inputtekst']) {
    echo "Tekst: ". $_POST['inputtekst'];
    exit;
}

Scriptet er nu som følger:

<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; i++) {
        s=a[i];
        try {
            if (o==new ActiveXObject(s))  break;
        }
        catch(e){};
    }
    window.XMLHttpRequest = o ? function(){return new ActiveXObject(s)} : null;
    o = null;
})();

</script>
<script language="javascript" type="text/javascript">
function myCallBack(oHttp) {
    if (oHttp.readyState<4) return;
        if (oHttp.status == 200) {
            document.getElementById("someResult").value=oHttp.responseText;
        } else {
            document.getElementById("someResult").value='Status er: ' + oHttp.Status;
        }
    oHttp = null;
}

function GoGetIt(indtastning) {
    var oXMLHttp = new XMLHttpRequest();
   
    oXMLHttp.open("post", "test.php", true);
    oXMLHttp.onreadystatechange = function(){ myCallBack(oXMLHttp) };
    oXMLHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    oXMLHttp.send("inputtekst" + indtastning);
}
</script>
Avatar billede superbent Nybegynder
02. november 2008 - 20:40 #5
Jeg ville ønske man i det mindste fik en fejl, så man ved hvor man skal kigge nogenlunde...
Avatar billede superbent Nybegynder
02. november 2008 - 20:53 #6
Hov, nej - det virker nu! Utroligt, fejlen var ikke koden, men test.php som ikke fik fat i "indtastning" - bah

roenving: vil du venligst komme med et svar?

Samt har jeg et tillægsspørgsmål - hvad er at foretrække når man skal have data via AJAX?

Eksempelvis havde jeg tænkt mig at have en fil, i dette tilfælde - test.php hvor jeg bare har:

if ($_POST['x']) {
// hent data fra database eller noget, og echo det.
}
if ($_POST['y']) {
// hent data hvor y skal bruges, fra database eller noget, og echo det.
}

Jeg har læst mig til at en del benytter JDON eller XML, og hvis det data jeg primært skal bruge, er indhold fra en database der skal vises - eksempelvis brugerdata, eller produktinformation af et givent produkt; hvad er så dit forslag, og hvis man skal bruge XML hvordan henter man så et specifikt felt ud udskriver.

<customer>
  <name>
    Personnavn
  </name>
  <city>
    Bynavn
  </city>
</customer>

Lige nu benyttes jo document.getElementById("someResult").value=oHttp.responseText;

Det må være noget i stil med:
document.getElementById("someResult").value=oHttp.responseText[customer][name];
kunne jeg forestille mig.
Avatar billede roenving Novice
03. november 2008 - 16:55 #7
Den absolut bedste, hvis du alligevel skal bruge det i javascript er at formattere som json (JavaScript Object Notation !-)

{"name":"Personnavn","city":"Bynavn"}

-- så får du fat i det med:

var res = eval( "(" + oHttp.responseText + ")" );

document.getElementById("someResult").value = res.name;//gælder et form-felt

-- eller hvis det skal indsættes som tekst i en anden slags element:

document.getElementById("someResult").firstChild.nodeValue = res.name;

-- så skal elementet have et indhold i forvejen, f.eks.

<span id="someResult">&nbsp;</span>

-- els velbekomme '')
Avatar billede superbent Nybegynder
03. november 2008 - 17:23 #8
Jeg bukker og takker :)
Avatar billede roenving Novice
03. november 2008 - 17:34 #9
-- og jeg takker for point ;~}
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
Kurser inden for grundlæggende programmering

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