Avatar billede amews_aj Nybegynder
05. december 2010 - 12:44 Der er 15 kommentarer og
1 løsning

XMLHTTPRequest Cross-site request

Hej,

Jeg har rodet lidt med XMLHTTPRequest for at kunne lave opslag på en anden side via browseren automatisk.
Jeg får dog problemer med "Same Origin Policy", og kan altså ikke lave Cross-site requests.

Er der nogen der har tips til at undgå dette?
Avatar billede jakobdo Ekspert
05. december 2010 - 13:17 #1
Enten skal du kigge på noget ala: http://api.jquery.com/jQuery.getJSON/
og alternativt kan du lave din egen "proxy" med en lille php/asp whatever kode, som henter indholdet fra den anden side og gemmer lokalt og dermed kan du så læse det med almindeligt XMLHttpRequest kald.
Avatar billede amews_aj Nybegynder
05. december 2010 - 13:23 #2
Det er vigtigt at det er browseren der rent faktisk laver request, og ikke serveren, da brugerens cookies osv. gerne skulle være tilgængelige for siden.
Avatar billede intenz Novice
05. december 2010 - 18:52 #3
Brugerens cookie vil ikke blive sendt med over i en cross-browser request, uanset hvilket fremgangsmåde du bruger. Men du selv sende de ting med du skal bruge, ligesom med almindelige kald.

Er iøvrigt enig med jakobdo's forslag.
Avatar billede intenz Novice
05. december 2010 - 18:53 #4
* cross-domain selvfølgelig
Avatar billede amews_aj Nybegynder
05. december 2010 - 18:59 #5
Jeg går da ud fra at browseren laver et request på samme måde som hvis du tastede adressen manuelt. Altså bliver Cookies sendt med.

Bemærk, jeg taler ikke om cookies som jeg sætter, men de cookies som brugeren allerede har tilhørende den pågældende side.
Avatar billede intenz Novice
05. december 2010 - 19:09 #6
Ja, cookies bliver sendt med hvis den request er til det samme domænenavn hvor cookien blev sat. Du kan ikke bruge den samme cookie på 2 forskellige domæner. Så på et cross-domain kald vil den ikke blive sendt med.
Avatar billede intenz Novice
05. december 2010 - 19:10 #7
Men hvis du allerede har cookien sat på det domæne du vil lave request til, kan du selvfølgelig gøre det. Så vil JSON metoden være det bedste valg, og det fungerer stort set som et AJAX kald.
Avatar billede amews_aj Nybegynder
05. december 2010 - 19:21 #8
Ok. Jeg kigger på det når jeg får tid.
Tak for hjælpen. Smid et svar begge to.
Avatar billede intenz Novice
05. december 2010 - 19:56 #9
Kommer her.

Kig på JSONP afsnittet i det link #1 skrev, eller søg efter JSONP på google, hvis du ikke vil bruge jquery.
Avatar billede amews_aj Nybegynder
05. december 2010 - 21:04 #10
Hmm, har jeg ret I at det kræver serveren returnerer JSONP, og ikke ren HTML?
Hvis det er tilfældet duer det alligevel ikke. Hvordan kan jeg med JSONP parse HTML ?
Avatar billede intenz Novice
05. december 2010 - 22:26 #11
Serveren returnerer typisk et JSON object, der er pakket ind i et funktionskald, som så bliver fyret af på klienten.

I princippet kan du godt sende HTML tilbage, så længe det ligger som en parameter i et funktionskald. Eller du kan ligge HTML koden ind i et JSON object. Hvilken en af disse du bruger bør ikke have betydning.

Serveren kan f.eks. så udskrive (serveren kaldes gennem et alm. script tag, ligesom alm. javascript filer):
minFunktion('<a href="et_link">Link</a>');


Og funktionen skal så ligge på klienten, som gør noget med resultatet, f.eks:
minFunktion(result) {
  document.getElementById('jsonpDiv').innerHTML = result;
}
Avatar billede intenz Novice
05. december 2010 - 22:30 #12
Hov, selvfølgelig med function foran minFunktion på klienten.
Avatar billede amews_aj Nybegynder
05. december 2010 - 22:35 #13
Har ikke adgang til serverens kildekode.
Avatar billede intenz Novice
06. december 2010 - 11:32 #14
Du kan ikke lave et cross-domain request fra klienten, hvis du ikke har adgang til serveren. Det ville være et kæmpe sikkerhedshul.
Avatar billede amews_aj Nybegynder
04. januar 2011 - 00:31 #15
Hov, jeg glemte pludselig alt om denne tråd...

--

Nej det var også hvad jeg selv umiddelbart tænkte, så nu har jeg da i det mindste fået det bekræftet.
Tak for din tid intenz, smid et svar :)
Avatar billede amews_aj Nybegynder
04. januar 2011 - 00:32 #16
Nå, det havde du allerede gjort :)
Endnu en gang tak for hjælpen.
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