Avatar billede glaede.dk Nybegynder
18. oktober 2010 - 11:38 Der er 7 kommentarer og
1 løsning

JQuery/AJAX get/post problem

Hej,

Jeg har et problem.. Jeg har noget JQuery kode hvor jeg har behov for at kalde $.get(url); funktionaliteten som er indbygget i JQuery. Det hele fungere perfekt i Mozilla, men i IE (typisk), så fungere det selvfølgelig ikke. Fejlmeddelsen er:

Message: Access is denied.

Line: 5113
Char: 4
Code: 0
URI: jquery.js

Jeg tænker om det er et cross-browser problem som kun optræder i IE?

Jeg kan se der er mange andre der har samme problem, men so far har jeg ikke kunnet finde en løsning!

Er der nogen derude som kan hjælpe mig?
Avatar billede intenz Novice
18. oktober 2010 - 16:41 #1
Det undrer mig at det virker i firefox, har også hørt det kan virke i opera.

Nå, men du kan ikke lave cross-domain kald med ajax, derfor får du permission denied. Der er gode sikkerhedsmæssige grunde til, at det ikke er tilladt.

Du kan omgå det ved enten af bruge JSONP (søg google), eller lave et ajax kald til en lokal php fil (f.eks.) og derfra hente det indhold du skal fra det andet domæne og besvare ajax requesten med det.
Avatar billede glaede.dk Nybegynder
19. oktober 2010 - 08:25 #2
Hej,

Det fungere perfekt i Firefox og det er også derfor det undrer mig. Jeg kan desværre ikke benytte JSONP. Faktisk er det ret simpelt, jeg skal bare tilgå en webadresse "uden at tilgå den". Forstået på den måde at den skal åbne en URL og efterfølgende ikke gøre andet. Det handler om at jeg skal sætte en variabel til 1 f.eks. Er der andre måder hvorpå jeg kan gøre det? Brugeren skal selvfølgelig ikke få indtryk af at den åbner en URL, forstået på den måde at der ikke skal poppe et nyt vindue op f.eks.

Så den skal lave et URL kald og ikke andet. Hvordan gør man det i JQuery/Javascript som ikke indebærer AJAX kald.
Avatar billede glaede.dk Nybegynder
19. oktober 2010 - 08:27 #3
Ang. det med Php, så har jeg prøvet med fopen(), men det kan jeg ikke få til at fungere korrekt. Jeg kan fint åbne f.eks. google.dk, men den side jeg skal kalde returnere en 500 fejl så vidt jeg husker.
Avatar billede intenz Novice
19. oktober 2010 - 11:17 #4
Livet bliver lidt nemmere for dig, når du ikke skal have noget tilbage :) Så er der nogle workarounds du kan bruge.

Hvis din fil på det andet domæne ikke udskriver noget tekst, ville jeg gøre det med et script tag.
F.eks. sådan:

var e = document.createElement('script');
e.type = 'text/javascript';
e.src = 'http://www.ditdomæne.dk/dinfil.php?variabel=1&u='+Math.random();
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(e, s);


Math.random er på for at sikre, at kaldet ikke bliver cached af browseren.

Hvis filen udskriver tekst, ville jeg gøre det med en skjult iframe. F.eks.
var e = document.createElement('iframe');
e.src = 'http://www.ditdomæne.dk/dinfil.php?variabel=1&u='+Math.random();
e.style.display = 'none';
document.body.appendChild(e);


Ingen af de scripts er testet, men prøv at se om det ikke virker alligevel.
Avatar billede glaede.dk Nybegynder
19. oktober 2010 - 12:53 #5
Hmm det funger perfekt i Mozilla, men jeg får en syntaks error i Internet Explorer. Hvordan dælen kan det nu være? Den brokker sig over syntaksen i min URL.

URL'en er:

https://xxx.com/xxx/xxx/xxx/data_request?id=lu_action&DeviceNum=9&serviceId=urn:upnp-org:serviceId:SwitchPower1&action=SetTarget&newTargetValue=0

Hvor xxx er erstattet selvfølgelig.
Avatar billede glaede.dk Nybegynder
19. oktober 2010 - 12:59 #6
Nå, det fungere hvis jeg benytter iframe løsningen :) Super!

Nu har jeg så et andet problem.. Jeg benytter JTemplates og JQuery til at hente noget JSON data ud. I Mozilla fungere det, igen, upåklageligt. Sagen er den at jeg opdatere noget data hvert sekund og hvis der er noget nyt data, så opdatere jeg brugergrænsefladen. Hvis ikke, så skal der selvfølgelig ikke opdateres noget. I Mozilla fungere det fint, men i IE er det som om den cacher dataen og ikke engang F5 vil opdatere dataen. MEN hvis jeg derimod åbner en ny tab i IE og går ind på www.google.dk, så er det som om den fatter at den skal opdatere dataen.

Er det noget du kan hjælpe med også ;) ?
Avatar billede glaede.dk Nybegynder
19. oktober 2010 - 15:11 #7
Endelig så er begge problemer løst!

Det viser sig at gode game IE føler at den skal cache Ajax kald. Dejligt!
Avatar billede intenz Novice
19. oktober 2010 - 20:26 #8
Den cacher GET kald, POST caches ikke. For at undgå at cache GET sætter man normalt bare en Math.random() efter, ligesom jeg gjorde i de to eksempler.
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