Avatar billede mtrolle Nybegynder
17. november 2006 - 22:48 Der er 11 kommentarer og
1 løsning

XMLHttpRequest på domæner

Hej,

Jeg skal levere en service til en partner. Har bygget en side op som han skal inkludere. Da sidens indholds i højde kan være utrolig varierende vil jeg ikke bruge en iframe, men i stedet prøvede jeg at arbejde med lidt Ajax. Har følgende script:
function makeHttpRequest(url, callback_function) {
  var http_request = false;

  if (window.XMLHttpRequest) { // Mozilla, Safari,...
      http_request = new XMLHttpRequest();
      if (http_request.overrideMimeType) {
          http_request.overrideMimeType('text/xml');
      }
  } 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('Din browser vil ikke tillade systemet loader indstillinger automatisk. Kontakt venligst din systemansvarlige.');
      return false;
  }
  http_request.onreadystatechange = function() {
      if (http_request.readyState == 4) {
          if (http_request.status == 200) {
              eval(callback_function + '(http_request.responseText)');
          } else {
              alert('There was a problem with the request. (Code: ' + http_request.status + ', URL: ' + url + ')');
          }
      }
  }
  http_request.open('GET', url, true);
  http_request.send(null);
}

function myDomHandler(txt) {
document.getElementById('hokusPokus').innerHTML=txt;
}


Til sidst vil jeg så kalde min side, fx:
document.write('<div id="hokusPokus">Indhold loades...</div>');
makeHttpRequest('http://exp.dk/udAfHuset/tilDig.php', 'myDomHandler');

Men jeg kan ikke få lov at kalde. Tester jeg det på min egen server, hvor jeg kalder /udAfHuset/tilDig.php virker det fint, men så snart jeg prøver med http://exp.dk/ virker det ik.

(Nu er exp naturligvis et eksempel ;)

Kan jeg ikke lave en request ude for mit domænenavn?
Avatar billede erikjacobsen Ekspert
17. november 2006 - 23:10 #1
Nej, det virker ikke på tværs af domæner - det ville være en sikkerhedsrisiko hvis det gjorde.
Du kan 1 af 2:

1) I visse browsere kan du indstille på sikkerhed,  så du kan. Det kan næppe anbefales generelt
2) Du kan bruge dit egen server (eget domæne) som en proxy. Du kalder dit eget script på serveren, der sender videre til den rigtige url, og afleverer resultatet.
Avatar billede coderdk Praktikant
18. november 2006 - 01:40 #2
Du kan lave et javascript (eller rettere et php-script som genererer et javascript) som skriver alt ud, dette kan din partner så inkludere sådan:

<script type="text/javascript" src="http://ditdomæne.dk/script.php"></script>

Jeg har gjort det et par gange, det er lidt kringlet, men det virker fint :)
Avatar billede coderdk Praktikant
18. november 2006 - 01:40 #3
Evt. lige over <script>:

<noscript>Du skal aktivere javascript for at se indholdet af denne side!</noscript>
Avatar billede mtrolle Nybegynder
18. november 2006 - 02:29 #4
coderdk-> Det er min nuværende løsning og den holder absolut ikke. Dataen jeg printer fucker noget så grusomt til tider og javascript er så ærgeligt sårbar, så et linjeskift fx kan fucke det hele op. Så den løsning er langt fra holdbar.

erikjacobse -> Kan du evt. forklare hvordan du ville sætte 2'eren op?
Avatar billede coderdk Praktikant
18. november 2006 - 05:34 #5
mtrolle, Er det ikke "bare" at escape de rigtige ting? ;)
Avatar billede mtrolle Nybegynder
18. november 2006 - 11:13 #6
coderdk-> Gid det var så vel.
Det kan bare ikke lade sig gøre fordi jeg arbejder med data fra super mange forskellige leverandøre og den data kan fucke noget så grusomt op :'( Derfor er den løsning ikke troværdig.
Avatar billede erikjacobsen Ekspert
18. november 2006 - 12:29 #7
Mht mit forslag nummer 2 har måske fået den vendt forkert - de er de "andre", der skal hente noget hos dig, og så hjælper en proxy hos dig ikke noget (vil du vide mere, så google på XMLHttpRequest og proxy).

Selvfølgelig kan det lade sig gøre at lave korrekt javascript, uanset de data, du skal putte i. Men man skal jo lige gøre det rigtigt ... ;)
Avatar billede olebole Juniormester
20. november 2006 - 15:01 #8
<ole>

Hvis du skriver ordentlig kode, er der ikke forskel på at bruge Ajax og traditionel JavaScript. Der er ingen forskel på, hvordan de to behandler f.eks. linjeskift.
Et \n er et \n, uanset om du bruger ren JS eller blander XMLHttpRequest ind i billedet  =)

/mvh
</bole>
Avatar billede mtrolle Nybegynder
20. november 2006 - 15:14 #9
Hey Ole,

Jeg har sådan ca. 20 partnere der levere data til mig i vidt forskellige formater og det er helt ærligt en umulighed at formatere korrekt fordi de konstant skifter format og laver underlige ændringer.

Men ellers tak for rådet :) Smid et svar.
Avatar billede olebole Juniormester
21. november 2006 - 14:18 #10
Okay, så kan jeg godt se, du sidder med et seriøst problem. Ajax kan du nemlig så heller ikke bruge ... og det eksempel, du viser, har forresten meget lidt med Ajax at gøre.
I Ajax udveksles kun rå data mellem server og klient ... al HTML-formatering foregår af mange grunde (herunder performance-mæssige) på klienten.

Samtidig har innerHTML-property'en aldrig været del af nogen officiel standard (og bliver det aldrig). Den er ydermere komplet inkompatibel med XHTML - hvorfor man ikke længere bruger den i seriøs kode =)
Avatar billede olebole Juniormester
21. november 2006 - 14:18 #11
- og et svar  ;o)
Avatar billede olebole Juniormester
21. november 2006 - 15:17 #12
Tak for points  :)
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