webForumDet fria alternativet

XMLHttpRequest.open

14 svar · 881 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 528 inlägg
#1

Hej
Har ordnat ett script som via XMLHTTP hämtar status.
Men, när jag kör mitt script i en webbläsare får jag:

Fel: uncaught exception: Nekades tillstånd att efterfråga metod XMLHttpRequest.open

Scriptet funkar fint när jag kör den lokalt i Editplus, men när jag kör samma script via en webbläsare så får jag felmeddelandet.

Den delen av scriptet som anropar via XMLHTTP ser ut såhär:

function httpRequest() {
        var req = false;
        if(window.XMLHttpRequest) {
                try {
                        req = new XMLHttpRequest();
			try {
	                        req.overrideMimeType('text/xml');
			} catch(e) {}
                } catch(e) {
                        req = false;
                }
        } else if(window.ActiveXObject) {
                try {
                        req = new ActiveXObject("Msxml2.XMLHTTP");
                } catch(e) {
                        try {
                                req = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch(e) {
                                req = false;
                        }
                }
        }

        return req;
}

function request( url, action, newreq ) {
	newreq.onreadystatechange = function () {
		if( newreq.readyState == 4 ) {
			action( newreq );
		}
	}
	newreq.open( "GET", url, true );
	newreq.send( null );
}

Vad kan det bero på?

Tack!

zcorpanMedlem sedan dec. 20042 269 inlägg
#2

Är url på samma domän ("same-origin")?

MickeA.comMedlem sedan feb. 20034 528 inlägg
#3

Nej, det är ju det.
Misstänker att det är det som är felet. När jag kör scriptet lokalt så funkar det, men då befinner jag mig inom samma domän som scriptet som anropas.

Har testat att lägga ut det på lite olika servrar nu och det är samma resultat överallt, funkar alltså inte. :/

Går det att "komma runt" det här.
Scriptet är inget jag snott, så om det är möjligt att "låsa upp" något på servern som anropas som löser det här, så är jag intresserad.

Tack!

spangoMedlem sedan juni 20006 147 inlägg
#4

Om du har kontroll över sidan som genererar XML-en kan du få den att svara med javascriptkod istället, så att du kan inkludera med en vanlig script-tagg. Förutom det finns inget vidare hållbart sätt att lösa det på.

MickeA.comMedlem sedan feb. 20034 528 inlägg
#5

Hmm, aha, okej.
Då ska jag kolla upp vilka möjligheter det finns att ordna upp det här, tack!

nitro2k01Medlem sedan aug. 20037 630 inlägg
#6

spango skrev:

Om du har kontroll över sidan som genererar XML-en kan du få den att svara med javascriptkod istället, så att du kan inkludera med en vanlig script-tagg. Förutom det finns inget vidare hållbart sätt att lösa det på.

Eller ännu bättre med lite JSON.

// Typ så här:
function loadResource(url){
    var sc=document.createElement("SCRIPT");
    sc.type="text/javascript";
    sc.src=url;
    document.getElementsByTagName("HEAD")[0].appendChild(sc);
}
MickeA.comMedlem sedan feb. 20034 528 inlägg
#7

Jag har testat lite olika saker kring det här nu och kommit fram till vissa slutsatser.
Till att börja med så gjorde jag ett aspscript, som ansluter till servern som genererar XML filen.
Jag läste in den med XMLHTTP ( i ASP) och skriver ut filen i dess helhet, som en XML fil, identisk med originalfilen.

Vidare så la jag upp filen på mitt egna webbhotell (Loopia) och filen ser jättebra ut.
Efter det så lade jag upp javascriptet som läser in filen, läste istället in "min" XML fil och det funkar kanon.

Men, när jag sedan lägger in detta på hemsidan där det här ska visas, funkar det inte heller.
Det kan tyda på:

  • En utgående port som är stängd på sidan där resultatet ska visas.
  • En inkommande port hos Loopia som inte tillåter att man gör en XMLHTTP Request från en annan server.

Jag testade sedan att lägga upp filen som läser in XML filen via Javascript på lite olika servrar, dels på One, Surftown samt på en annan server hos Loopia.
Samma sak där, det går inte att läsa in XML filen, vilket kan tyda på att Loopa inte tillåter det här.

Då skickade jag ett mail till deras support, som skulle kolla upp vad som kunde tänkas vara fel.

Fler förslag / idéer välkomnas, tack!

colioneMedlem sedan juni 20013 386 inlägg
#8

Jag vet att loopia har stängt av användningen av fopen i php, för att hämta filer från andra servrar än sin egen. Det är nog en väldigt stor chans att de har gjort likadant för xmlhttp-request i asp.

MickeA.comMedlem sedan feb. 20034 528 inlägg
#9

Jo, jag är inne på samma spår, får se vad dom svarar på mitt senaste mail.
Om så är fallet så får jag hitta en annan server där jag kan lägga scriptet som skapar XML filen.
Det konstiga är ju bara att filen som skapar ursprungsfilen nekar anslutningen via XMLHTTP med Javascript, men inte via ASP.

Hur kan det komma sig?

spangoMedlem sedan juni 20006 147 inlägg
#10

nitro2k01 skrev:

Eller ännu bättre med lite JSON.

Mja, enbart json funkar inte om det läggs till dynamiskt, man måste ju ha nån slags callback som meddelar när laddningen är klar.

MickeA.com skrev:

Det konstiga är ju bara att filen som skapar ursprungsfilen nekar anslutningen via XMLHTTP med Javascript, men inte via ASP.

Det är inte webbservern som nekar anslutningen, det är webbläsaren som gör det. För webbservern är det ju bara en helt vanlig ASP-sida som kan hämtas av vem som helst, hur som helst.

MickeA.comMedlem sedan feb. 20034 528 inlägg
#11

Hmm, okej, men varför nekar webbläsaren anslutningen?
Nu har jag även testat att lägga upp scriptet som skapar XML filen hos Aleborg.
Samma sak där, filen som skapar XMLfilen funkar fint, men det går inte att ansluta dit för att hämta data i den.

Jag måste lösa det här, men hur ska jag göra?
Det jag har gjort, är ju att skapa en exakt kopia av originalfilen, men det är konstigt att det inte går att ansluta till den heller.

Så, är det här en "spärr" hos webhotellen?

spangoMedlem sedan juni 20006 147 inlägg
#12

MickeA.com skrev:

Hmm, okej, men varför nekar webbläsaren anslutningen?

Av säkerhetsskäl, för att inte vilka script som helst ska kunna hämta t.ex. din adressbok på någon webbmail och skicka spam till alla dina kompisar. Därför får script bara hämta XML från sidor som ligger på samma domän som scriptet (och från underdomäner till denna domän).

Läsning:
http://en.wikipedia.org/wiki/Xss
http://en.wikipedia.org/wiki/Same_origin_policy

MickeA.com skrev:

Jag måste lösa det här, men hur ska jag göra?
Det jag har gjort, är ju att skapa en exakt kopia av originalfilen, men det är konstigt att det inte går att ansluta till den heller.

Så, är det här en "spärr" hos webhotellen?

Felmeddelanden underlättar... ;) kan du gå in på den XML-genererande sidan direkt med en browser? Om nej, vad får du för fel? Eller är det från den andra webbservern du inte kan ansluta?

MickeA.comMedlem sedan feb. 20034 528 inlägg
#13

spango skrev:

Felmeddelanden underlättar... ;) kan du gå in på den XML-genererande sidan direkt med en browser? Om nej, vad får du för fel? Eller är det från den andra webbservern du inte kan ansluta?

http://dev.mickea.com/b2b-test.asp

Som du ser funkar det att gå in direkt via webbläsaren, när jag kör javascriptet får jag (som jag nämner i det första inlägget):

Fel: uncaught exception: Nekades tillstånd att efterfråga metod XMLHttpRequest.open

Så, det enda sättet att få det här att fungera, är det att lägga scriptet som skapar XML dok. på samma server som javascript som läser in filen?

colioneMedlem sedan juni 20013 386 inlägg
#14

Ja eller anropa ett asp-script på servern som i sin tur gör en xmlhttprequest till sidan som spottar ut xml och på så sätt agerar mellanhand.

MickeA.comMedlem sedan feb. 20034 528 inlägg
#15

Hmm, okej.
I det här fallet går inte det.
Jag är osäker på om det ens går att lägga "ett eget" phpscript på aktuell server för att åstadkomma samma sak.

Jag får avvakta och kolla på fler alternativa lösningar.

Tack ändå!

Genererad på 386 ms · cache AV · v20260730165559-full.f96bc7eb