Avatar billede qualon1 Nybegynder
28. november 2006 - 17:45 Der er 5 kommentarer

AJAX fra anden server

Hej

Jeg er ved at lave sådan at jeg kan hente noget information fra en anden server via AJAX. Problemet er at jeg får en fejl kode: Adgang nægtet.
Min kode ser sådan her ud:

function alertContents(http_request, elmID, showLoad) {

    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            if(http_request.responseText != "") {
                document.getElementById(elmID).innerHTML = http_request.responseText;
               
            }
        } else {
            document.getElementById(elmID).innerHTML = 'There was a problem with the request. Status: '+http_request.status;
        }
    } else {
        if(showLoad == 1) {
            document.getElementById(elmID).innerHTML = 'Loading...';
        }
    }

}
function serverCommunication(theurl, elmID, showLoad) {
    var http_request = "";
    theurl = theurl+'&request='+Math.random();
   
    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('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }

    http_request.onreadystatechange = function() { alertContents(http_request, elmID, showLoad); };
    http_request.open('GET', theurl, true);
   
    http_request.send(null);
}


og kaldes med:
setTimeout("serverCommunication('http://MITDOMÆNE/server/index.php?', 'test', 1)", 1000);

håber nogle kan hjælpe mig med dette
Avatar billede arne_v Ekspert
28. november 2006 - 17:54 #1
ville det ikke vaere et gigantisk sikkerheshul hvis det var muligt ?
Avatar billede Slettet bruger
28. november 2006 - 19:31 #2
Jo det ville være et gigantisk sikkerhedshul og derfor er det heller ikke muligt at hente noget fra et domæne, hvorfra "siden" selv kommer.

Løsningen er at du på din server implementerer en proxy, som laver det faktiske request og videre formidler resultatet til din AJAX applikation.
Avatar billede qualon1 Nybegynder
28. november 2006 - 19:38 #3
jeg fandt en løsning ved at lave en local fil hente alt html fra den eksterne server... det virker fint..
Avatar billede olebole Juniormester
29. november 2006 - 10:49 #4
<ole>

- og så har det stadig ikke meget med Ajax at gøre, når man HTML-formaterer data på serveren ... udover at innerHTML-property'en aldrig har været valid i nogen standard og slet ikke kan anvendes under XHTML  ;o)

Kan man nøjes med GET-requests behøver man slet ikke at bruge XMLHttpRequests, men blot noget à la:

function myRequest() {
    var oScr, aQ = [], a = arguments;
    for (var i=0,j=a.length; i<j; i+=2) {
        aQ.push( a[i]+"="+encodeURIComponent(a[i+1]) );
    }
    if (typeof window.oScrLoader!="object") {
        window.oScrLoader = document.createElement("div");
        document.getElementsByTagName("body")[0].appendChild(window.oScrLoader);
    }
    while (oScrLoader.firstChild) oScrLoader.removeChild(oScrLoader.firstChild);
    oScr = document.createElement("script");
    oScr.setAttribute("type", "text/JavaScript");
    oScr.setAttribute("src", "http://www.domain.dk/response.php?"+aQ.join("&"));
    oScrLoader.appendChild(oScr);
}

I filen 'response.php' udskriver du så et JS-kald til en funktion i hoveddokumentet og medsender data i form af et JS-objekt ...f.eks:

var oData = {
    rows: [
        {user:"Ole", age:51, sex:"m"},
        {user:"Bole", age:51, sex:"m"},
        {user:"Sascha", age:14, sex:"f"}
    ]
}
insertUsers(oData);

Funktionen 'insertUsers' opretter så f.eks. tabelrækker - fylder de relevante data i cellerne og append'er rækkerne til et tbody-element

/mvh
</bole>
Avatar billede olebole Juniormester
29. november 2006 - 10:53 #5
- nåja ... request'en kaldes således:
    myRequest("contxt", "getUsers", "enVar_1", "noget", "enVar_2", "noget_andet");

- hvilket resulterer i:
    http://www.domain.dk/response.php?contxt=getUsers&enVar_1=noget&enVar_2=noget_andet
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