Oprettet ons. d. 04. marts 2009 kl. 10:17:42

donkazz
donkazz (11.110 point. Point ude: 1.395)

MSXML / AJAX / IE7 / IIS 7.0 - virker ej

Hej Eksperter!

Jeg er løbet ind i et af de mest underlige problemer jeg har oplevet når det kommer til AJAX og JS generelt.

Jeg har siddet og udviklet en masse funktioner på min localhost, som alle er baseret på AJAX. De virker alle i Internet Explorer 7.0, FireFox 3.0, Safari, Google Chrome, osv. Dvs. koden er god nok - skulle man mene.

Da jeg så uploadede min løsning til en server, ja så stoppede AJAX funktionerne med at virke. Men KUN i IE7 - og endda i selvsamme klient som jeg havde testet med på localhost. :-/

Jeg har brugt hele dagen i går på at søge på nettet på en evt. løsning, men det eneste jeg er kommet nærmere, er at finde ud af HVOR fejlen ca. ligger, og mit umiddelbare gæt er på serveren.

For at I ikke skal sidde og kigge tusindevis af linjer kode igennem, har jeg lavet en simplificeret funktion der ikke gør andet end at sende en GET til en ASP side, som så udskriver den variabel man sender med.
Afsendersiden alert'er så responseText'en.

I alt andet end IE7 bliver der alert'et "test" - i IE 7 kommer der en "Handlingen kunne ikke udføres, da der opstod en fejl c00ce56e"

I kan se afsendersiden her:
http://test.orango.nu/ (...)

ajax.asp ser sådan her ud:
<%
Response.ContentType = "text/html" 
Response.AddHeader "Content-Type", "text/html;charset=UTF-8" 
Response.CodePage = 65001 
Response.CharSet = "UTF-8"

response.write request("cmd")
%>

Håber I kan hjælpe mig!

Skrevet ons. d. 04. marts 2009 kl. 10:34:17| #1

viperine
viperine (34.653 point)
www.amunium.dk
En hurtig Google-søgning på fejlkoden giver bl.a.:
http://www.webmasterworld.com/ (...)

Det er godt nok ud fra PHP, men konklusionen er det samme - det er et tegnkodeproblem. Har du prøvet at skifte den til ISO-8859-1, eller helt fjerne charset-headeren?

Skrevet ons. d. 04. marts 2009 kl. 10:36:31| #2

softspot
softspot (100.650 point)
www.softspot.dk
Du kunne evt. prøve at implementret det samme med jQuery eller prototype og se om det stadig ikke fungerer. Disse biblioteker har da en vis udbredelse og burde være stabile på de fleste nyere populære platforme. Du kan linke jQuery ind i din side via Googles online scriptbibliotek således:

<script src="http://www.google.com/ (...) type="text/javascript"></script>
<script type="text/javascript">google.load("jquery", "1.2.6");</script>

og kalde din sever således:

$.get("ajax.asp?cmd=test", function(data) {
  alert(data);
});

Skrevet ons. d. 04. marts 2009 kl. 10:38:34| #3

donkazz
donkazz (11.110 point)
Ja det har jeg prøvet, der er ingen forskel. Jeg mener at have fundet frem til noget med at det har noget med IIS7.0 at gøre, og den MSXML parser der bruges når det er Internet Explorer, men det virker bare fuldstændigt håbløst, at Microsoft skulle lave noget der ødelægger det for dem selv, eller så måske alligevel ikke, men underligt - ja!

Det skal siges at min oprindelige kode er baseret på jQuery, men fejlen er den samme - dog fik jeg jQuery til at returnere "parseerror".

Skrevet ons. d. 04. marts 2009 kl. 10:45:13| #4

donkazz
donkazz (11.110 point)
softspot, tjek min kode nu, jeg har smidt jQuery ind så du kan se at det ikke kun er mig der er noget galt med. I IE reagerer den slet ikke. :-O

Skrevet ons. d. 04. marts 2009 kl. 10:45:57| #5

softspot
softspot (100.650 point)
www.softspot.dk
OK, har du så forsøget at kalde siden med $.ajax i stedet og så sætte parameteren processData:false? Jeg havde selv problemer med at få data tilbage fra serveren på et tidspunkt og der slog jeg automatisk processering af data fra, hvorefter det fungerede. Dog skal jeg ikke kunne sige om det kun fungerede i mit specifikke tilfælde, eller om det er noget der løser problemer med encoding generelt...

Skrevet ons. d. 04. marts 2009 kl. 10:51:02| #6

softspot
softspot (100.650 point)
www.softspot.dk
Jeg tror grunden til at browseren ikke reagerer på jQuery, er fordi den function der defineres kun kaldes i tilfælde at success og hvis der er parseerror, så vil den kalde error-funktionen i stedet (og den er jo ikke defineret i en $.get).

Prøv i stedet denne version:

new $.ajax({
    url:"ajax.asp",
    type:'get',
    data:'cmd=test',
    dataType:'html',
    processData:false,
    success:function(data) {
        alert(data);
    },
    error:function(xhr, statusText, err) {
        alert("Der opstod en fejl: " + statusText);
    }
});

Skrevet ons. d. 04. marts 2009 kl. 11:01:43| #7

donkazz
donkazz (11.110 point)
Tjek siden nu...

"Der opstod en fejl: parseerror"

:(

Skrevet ons. d. 04. marts 2009 kl. 11:14:31| #8

softspot
softspot (100.650 point)
www.softspot.dk
Hmmm... umiddelbart er det du returnerer fra testsiden jo ikke specielt kompliceret :-)

Det kan være du skal prøve at sætte Content-Type til text/plain i asp-siden og så sætte dataType til 'text' i $.ajax-setup...

Skrevet ons. d. 04. marts 2009 kl. 11:25:31| #9

donkazz
donkazz (11.110 point)
Hermed gjort..

ajax.asp:
<%
Response.ContentType = "text/plain" 
Response.AddHeader "Content-Type", "text/plain;charset=UTF-8" 
Response.CodePage = 65001 
Response.CharSet = "UTF-8"


response.write request("cmd")
%>

ajax.html JS:
new $.ajax({
    url:"ajax.asp",
    type:'get',
    data:'cmd=test',
    dataType:'text',
    processData:false,
    success:function(data) {
        alert(data);
    },
    error:function(xhr, statusText, err) {
        alert("Der opstod en fejl: " + statusText);
    }
});


stadig parseerror.. :-/

Skrevet ons. d. 04. marts 2009 kl. 11:30:04| #10

softspot
softspot (100.650 point)
www.softspot.dk
Prøv lige at udvide udskriften af fejloplysninger (det kan være du får flere hints derfra :-)):

new $.ajax({
    url:"ajax.asp",
    type:'get',
    data:'cmd=test',
    dataType:'text',
    processData:false,
    success:function(data) {
        alert(data);
    },
    error:function(xhr, statusText, err) {
      alert(
        "Der opstod en fejl: " + statusText + "\n" +
        "Status: " + xhr.status + "\n" +
        "err: " + err + "\n"
      );
    }
});

Skrevet ons. d. 04. marts 2009 kl. 11:50:58| #11

donkazz
donkazz (11.110 point)
Der opstod en fejl: parseerror
Status: 200
err: undefined

:-O

så vidt jeg ved er status 200 = OK! ... eller hvad?

Jeg har installeret en header sniffer (Wireshark) på opfordring af en anden, men de resultater jeg får fra den siger mig ikke så meget, måske du ville kunne bruge det til noget?

Skrevet ons. d. 04. marts 2009 kl. 14:09:17| #12

olebole
olebole (213.963 point)
<ole>

Med forholdsvist komplekse libraries som Prototype og jQuery er det ofte vanskeligt at debugge - og da de er skrevet i gammel, uhensigtsmæssig og invalid kode, kan der ske sære ting.

Prøv et helt simpelt Ajax-eksempel:

<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 askServer(sURL, sQuery) {
    var _oHttp = new XMLHttpRequest();
    _oHttp.open("post", "http://www.domain.dk/ (...), true);
    _oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    _oHttp.onreadystatechange = myCallBack;
    _oHttp.send(sQuery);
   
    function myCallBack() {
        if (_oHttp.readyState<4) return;
        alert(_oHttp.responseText);
        _oHttp = null;
    }
}

var sQuery = "cmd="+encodeURIComponent("A command value");
askServer("http://domain.dk/ (...), sQuery);
</script>

/mvh
</bole>

Skrevet ons. d. 04. marts 2009 kl. 14:10:13| #13

olebole
olebole (213.963 point)
- og så kan du stadig bruge asp-koden:

<%
Response.ContentType = "text/plain" 
Response.AddHeader "Content-Type", "text/plain;charset=UTF-8" 
Response.CodePage = 65001 
Response.CharSet = "UTF-8"


response.write request("cmd")
%>

Skrevet ons. d. 04. marts 2009 kl. 14:14:23| #14

olebole
olebole (213.963 point)
Ups ... nu sender den jo POST, så du skal naturligvis modtage variablen 'cmd' som sådan i asp-filen  ;o)

Skrevet ons. d. 04. marts 2009 kl. 14:37:11| #15

donkazz
donkazz (11.110 point)
Med dit eksempel olebole, der virker det fint i FireFox (som altid), men Internet Explorer gider stadig ikke lege med. :-/

Fejlkoden i script-vinduet er: c00ce56e

:-((

Skrevet ons. d. 04. marts 2009 kl. 14:39:10| #16

softspot
softspot (100.650 point)
www.softspot.dk
"Heldigvis" er koden forberedt på post ;-)

Skrevet ons. d. 04. marts 2009 kl. 14:46:54| #17

softspot
softspot (100.650 point)
www.softspot.dk
Er du 100% sikker på at ajax.asp er gemt i UTF-8 format?

Skrevet ons. d. 04. marts 2009 kl. 14:55:20| #18

donkazz
donkazz (11.110 point)
Yes... Når jeg har filen åben i eksempelvis Notepad++ står der UTF-8 og jeg er sikker på at jeg har gemt som UTF-8 og at alt bliver encodet i UTF-8 - men er det ikke underligt at det KUN er IE der har problemet? :-/ og vel at mærke KUN når filerne er online, hvis man kører dem på sin egen maskines localhost er der intet problem. Om det så er fordi IIS'en på min egen computer er 5.1 og den på serveren er 7.0, ved jeg ikke, men hvad i al verden skulle der være så anderledes på 7.0'eren at den ikke gider lege med AJAX?

For en god ordens skyld kan jeg sige at det er en Windows Web Server 2008 64 bit, med IIS 7.0 der kører 32-bit kompatibel tilstand.

Skrevet ons. d. 04. marts 2009 kl. 15:33:31| #19

olebole
olebole (213.963 point)
Det må være et problem på din server. Jeg har aldrig mødt dét problem før - og jeg har ellers lavet en hel del Ajax og rodet med Ajax og lign. teknikker siden 2000

Skrevet ons. d. 04. marts 2009 kl. 15:42:28| #20

donkazz
donkazz (11.110 point)
Ja det er også et serverproblem jeg er kommet frem til, men hvem/hvor skal man spørge om specifikt dette problem? :-/ og er der nogen der har en idé om hvad det kunne være på serveren der gør det? Det er jo tilsyneladende kun specifik for folk der bruger IE :-s

Skrevet ons. d. 04. marts 2009 kl. 16:03:21| #21

olebole
olebole (213.963 point)
Prøv at variere, hvad du skriver i dit asp-dokument. Så kan du måske komme fejlen nærmere. Hvad sker der f.eks, hvis du slet ikke skriver variablen eller andet ud:

<%
Response.ContentType = "text/plain" 
Response.AddHeader "Content-Type", "text/plain;charset=UTF-8" 
Response.CodePage = 65001 
%>

Skrevet ons. d. 04. marts 2009 kl. 16:14:08| #22

donkazz
donkazz (11.110 point)
Så alert'er den sgu.. :-O men selvfølgelig bare blankt, men for fanden, pardon my french, så er problemet jo nærmere lokaliseret... men hvad dælen så? Er det ASP motoren der udskriver forkerte tegn eller hvad? :-O

Skrevet ons. d. 04. marts 2009 kl. 16:21:50| #23

olebole
olebole (213.963 point)
Jeg er glad for at få lige netop dét spørgsmål!  *LoL*  ;D

Skrevet ons. d. 04. marts 2009 kl. 16:24:46| #24

olebole
olebole (213.963 point)
Jeg kikker på det i aften engang. Jeg skal hjem nu  ;o)

Under PHP har jeg ofte selv haft glæde af at skrive en lille logfil med det indhold/data, jeg ellers prøver at sende retur til browseren (du kan evt. bruge fileSystemObject under ASP). Det er som bekendt ret irriterende, at man ikke direkte kan se sit output, når man roder med Ajax  ;o)

Skrevet ons. d. 04. marts 2009 kl. 16:42:50| #25

donkazz
donkazz (11.110 point)
Hjem? Du går ingen steder! ;-D

Det lyder godt olebole, jeg glæder mig til at høre mere.. og hvis du får lyst til at uddybe det med logfil, så er jeg lutter øre. :-D

Skrevet ons. d. 04. marts 2009 kl. 16:57:12| #26

andreas13_fam
andreas13_fam (3.755 point)
Har selv næsten samme problem. Hos mig kan jeg dog få det til at virke ved at trykke på F5 efter den har indlæst siden, men hvis jeg skriver URL'en igen virker det ikke. Jeg tror at olebole er en af de få der kan løse problemet.

Skrevet fre. d. 06. marts 2009 kl. 11:06:14| #27

andreas13_fam
andreas13_fam (3.755 point)
er olebole gået i stå ? :D

Skrevet lør. d. 07. marts 2009 kl. 23:02:41| #28

olebole
olebole (213.963 point)
Sorry, har haft travlt  =)

Prøv lige:

    function myCallBack() {
        if (_oHttp.readyState<4) return;
        alert(_oHttp.status);
        _oHttp = null;
    }

Skrevet lør. d. 07. marts 2009 kl. 23:22:54| #29

olebole
olebole (213.963 point)
Prøv også at slette din ASP-linje:
    Response.CharSet = "UTF-8"

Skrevet man. d. 09. marts 2009 kl. 18:08:28| #30

andreas13_fam
andreas13_fam (3.755 point)
Personligt har jeg enlig selv fået noget til at fungere.
http://www.eksperten.dk/ (...)
Her er så min testside.
http://www.kogebogen.a-mweb.dk/ (...)

phpfilen er bare:
<?php
echo $_POST['ajax'];
?>

Skrevet tor. d. 12. marts 2009 kl. 13:55:45| #31

donkazz
donkazz (11.110 point)
Det er jo alt for sindssygt det her...

Jeg udkommenterede således:
Response.ContentType = "text/plain" 
'Response.AddHeader "Content-Type", "text/plain;charset=UTF-8" 
Response.CodePage = 65001 
Response.CharSet = "UTF-8"

og så virkede det. :-( og :-D

":-(" fordi det er utroligt så lidt der skulle til og ":-D" fordi nu virker det jo.

Men hvorfor i al verden ødelægger den ene linje det for IE, men ikke for de andre?

Jeg havde i øvrigt forsøgt at fjerne den linje, men det var i en kæmpe lang fil fyldt med includes, og da det ikke ændrede noget tænkte jeg ikke på at mange af includesne måske også lige har den linje.. :-/

Nå men jeg siger SUUUUUPER mange tak olebole, det var forløsningen på min store knude i hovedet, der har været der i flere uger nu.

Nu skal jeg bare til at søge og erstatte kan jeg se på det hele :-)

Skrevet tor. d. 12. marts 2009 kl. 14:08:23| #32

donkazz
donkazz (11.110 point)
Hvis du smider et svar olebole, så får du lige dine velfortjente point. Har du en idé om hvorfor det lige fucked op for IE exclusively? :-o

Skrevet lør. d. 14. marts 2009 kl. 22:47:57| #33

olebole
olebole (213.963 point)
Nej, ikke på stående hånd ... men det er da absolut noget, jeg skal have forsket i  =)

Skrevet søn. d. 15. marts 2009 kl. 10:17:56| #34

donkazz
donkazz (11.110 point)
Jeg ser frem til en artikel om emnet i fremtiden så ;-)

Tak for hjælpen!

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Skub indhold ned

Oprettet den 3. februar 2012 kl. 22.26
i-love-pc giver 80 point for svar | Giv et svar »

Hjælp til at lave formular kategorier

Oprettet den 3. februar 2012 kl. 21.09
idipot giver 200 point for svar | Giv et svar »

on mouse down repeat

Oprettet den 3. februar 2012 kl. 12.29
klovnefisken giver 30 point for svar | Giv et svar »

Seneste guides

Den gode bruger
Adgang til NAS-server via WAN
Kollektion af Batch tutorials (FJERNET)
Tilpas din YouTube afspiller


   




Tips & Tricks fra PC World

Teaser billede

Sådan fjerner du pladskrævende metadata fra dine fotos

Det er langt fra altid, at dine billeders metadata såsom kameramodel og geografisk placering er vigtige at bevare. JPG & PNG Stripper kan luge ud i billedfilerne, så de fylder meget mindre....


Anmeldelser fra PC World

Teaser billede

Test: Superlet bærbar med mange muligheder

Toshiba har med Satellite Z830 skabt en af verdens letteste ultrabooks. Den vejer 1,1 kilo, og computeren på 13 tommer ser på papiret ud til at være en oplagt rejsekammerat. Men den lave vægt har...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Samsung Galaxy S III på vej

Samsungs bedst sælgende smartphone nogensinde får en efterfølger om kort tid.


Nyheder fra Computerworld

Teaser billede

Apple retter hele 51 sikkerhedshuller i Mac OS X

Apple lukker hele 51 sårbarheder i Mac OS X, hvoraf de fleste er kritiske. Se her, hvor hullerne er.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger