Avatar billede inctor Nybegynder
09. februar 2008 - 13:52 Der er 13 kommentarer og
1 løsning

Ajax IE7 fejl

Hej Alle,

Jeg har et input felt, "searchName", hvor søgeordet indtastes med en onKeyUp event der skal udføre et ajax script.

Det den skal gøre er at åbne filen "qDb.php?vars=$searchName", og så hente alt indholdet fra output i den fil og ligge det ind i et Div element.

Alle de koder jeg har haft brugt, har ikke været kompatibelt med IE7.

Nogen der kan hjælpe med et script der både virker i FF og IE7 ?
Avatar billede roenving Novice
09. februar 2008 - 16:24 #1
onkeyup="getAjax(this);"

-- og i funktionen:

function getAjax(sElm){

...

var url = "qDb.php?vars=" + sElm.value;

...

}
Avatar billede olebole Juniormester
09. februar 2008 - 16:24 #2
<ole>

Det lyder ikke hensigtsmæssigt at hente data på hvert tastetryk. I stedet bør du nok gøre, som Google gør på 'Google Suggest' ... hent data hvert eller hvertandet sekund. Ellers vil en hurtigskrivende bruger belaste serveren unødigt - og resultaterne fra serveren når alligvel ikke ned på klienten, før næste request er sendt.

Derudover burde der ikke være noget, der ikke er kompatibelt med IE7 - med mindre du altså bruger _meget_ gammel kode.
Det er ikke muligt at give dig et script, der med sikkerhed virker, da Ajax jo altid er skræddersyet til den aktuelle kode

/mvh
</bole>
Avatar billede olebole Juniormester
09. februar 2008 - 16:28 #3
- og så bruger man forøvrigt ikke GET-forespørgsler i Ajax, da det presser IE ud i 'hukommelsestab'. Der er ikke tale om 'ægte' memory leaking - men ikke desto mindre cache's dokumenterne i IE, hvilket æder af hukommelsen
Avatar billede inctor Nybegynder
09. februar 2008 - 19:22 #4
Ole, det er jo fordi at det er søgestrengen, altså at det er værdien i mit søgefelt.

Den skal jo kun hente noget fra databasen i qDb.php?vars=swe

kommer til at udskrive:
Navn: Sweeney Todd. Størrelse: 32 Kb
Navn: Swedish Soccer. Størrelse: 82 Kb'

Osv, altså kun dem som har swe i "navn" feltet fra databasen.

Jeg har et script, men det virker bare kun i FF.
Det giver systemfejl i IE7.
Avatar billede olebole Juniormester
09. februar 2008 - 21:30 #5
Ja, jeg ved godt, hvad Ajax er, men du bør sende alle requests som post-requests:

var sRequest = "vars=" + encodeURIComponent(oInput.value);
var oHttp = [Instantiering af et XMLHttpReqest objekt];
oHttp.open("post", "http://www.domain.dk/sti/til/side.php", true);
oHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
oHttp.onreadystatechange = fnCallBack;
oHttp.send(sRequest);
Avatar billede inctor Nybegynder
09. februar 2008 - 22:37 #6
Hmm er ikke god til ajax,

Men vil du ikke lave mig et ajax-script der kan gøre følgende.
Mit input felt, searchName , skal indlæse siden testFil.php?vars=
hvor det så er vars=(searchName). Altså hvad der nu end står i feltet searchName,
hvor den derefter tager alt indholdet fra testFil.php og ligger det ind i et div element med ID'et "resultat".

Hvis du forstår?

Kan henvise til det jeg har nu: www.inctor.net/undertekst

Mit Ajax-Script er følgende:


var url = "testFil.php?vars=";
// The server-side script
function handleHttpResponse() {
if (http.readyState == 4) {
document.getElementById("teksten").innerHTML = http.responseText;
}
}

function hentTekst() {
var tekstEn = document.getElementById("navnet").value;
http.open("GET", url + escape    (tekstEn), true);
http.onreadystatechange = handleHttpResponse;
http.send(null);

}

function getHTTPObject() {

  var xmlhttp;

  /*@cc_on

  @if (@_jscript_version >= 5)

    try {

      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

    } catch (e) {

      try {

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

      } catch (E) {

        xmlhttp = false;

      }

    }

  @else

  xmlhttp = false;

  @end @*/

  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {

    try {

      xmlhttp = new XMLHttpRequest();

    } catch (e) {

      xmlhttp = false;

    }

  }

  return xmlhttp;

}

var http = getHTTPObject(); // We create the HTTP Object




Kan du ikk hjælpe med at få det til at virke begge steder ?
Avatar billede olebole Juniormester
10. februar 2008 - 01:32 #7
Du har helt misforstået Ajax og teknikens virkemåde. I øjeblikket udskriver din server et komplet HTML-dokument, men i Ajax returneres data i XML- eller JSON-format - og der bruges ikke innerHTML, men DOM til indsættelse af data i browser-dokumentet. Det bliver en lang artikel, jeg ikke har mod på at skrive til dig lige nu  :)
Avatar billede olebole Juniormester
10. februar 2008 - 01:35 #8
- og det er dybt gruvækkende, hvis din kode virkelig virker i Firefox! Det viser lidt om, hvor komplet forkrøblet, dens DOM lag er  :o|
Avatar billede inctor Nybegynder
10. februar 2008 - 16:07 #9
Det er derfor jeg spørger dig om du kan hjælpe mig med at å en omgang kode der virker.?

Som kan det jeg har beskrevet oven over.

Jeg har ikke helt forstået Ajax.
Avatar billede olebole Juniormester
10. februar 2008 - 16:28 #10
Du kan kikke på eksemplerne i denne tråd:
    http://www.eksperten.dk/spm/817625

- men det er som sagt ikke noget, man lige forklarer ... lidt ligesom en blindtarms operation  ;o)
Avatar billede inctor Nybegynder
10. februar 2008 - 22:10 #11
Nå, har fået noget nyt kode.

<script type="text/javascript" language="javascript">
  var http_request = false;
  function makePOSTRequest(url, parameters) {
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            // set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
        }
      } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
              http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
      }
      if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
      }
     
      http_request.onreadystatechange = alertContents;
      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
  }

  function alertContents() {
      if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            //alert(http_request.responseText);
            result = http_request.responseText;
            document.getElementById('teksten').innerHTML = result;           
        } else {
            alert('There was a problem with the request.');
        }
      }
  }
 
  function get(obj) {
      var poststr = "test=" + encodeURI( document.getElementById("navnet").value );
      makePOSTRequest('testFil.php', poststr);
  }
</script>

Den gør præcis det jeg vil, men selvfølgelig i Internet Explorer 7 giver den følgende fejl: "Handlingen kunne ikke udføres, da der opstod en fejl c00ce56e."

Er det noget du vil hjælpe med Ole.?
Seriøst prøver virkelig at få det il at virke, men det giver ikke så meget mening for mig det der ajax og skal bruge det til søgning der.
Avatar billede olebole Juniormester
10. februar 2008 - 22:40 #12
Det er stadig dårlig og invalid kode. Prøv nu at kikke på det link, jeg skrev
Avatar billede inctor Nybegynder
22. maj 2009 - 16:05 #13
Opret et svar og få dine point Ole... :)
Avatar billede inctor Nybegynder
01. maj 2010 - 21:16 #14
Eftersom Ole ikke oprettede et svar, så ordner jeg det selv.
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