webForumDet fria alternativet

XMLHttp från js-fil, presentera i alert

2 svar · 382 visningar · startad av colione

colioneMedlem sedan juni 20014 421 inlägg
#1

Sitter här och fipplar lite med javascript..tänkte gör en liten behändig js-fil som talar om för mig vad jag har för externt ip...men tje fick jag ;)

Så här ser den fina lilla filen ut:

function getHTML(url){
	var MyXMLReq=new ActiveXObject("Microsoft.XMLHTTP"); //skapa XMLHTTP-objektet

	if(MyXMLReq){ //Skapat?
		MyXMLReq.open("GET",url,false); //Skapar förfrågan att skicka...
		MyXMLReq.send(); //...skickar förfrågan...
		return(MyXMLReq.responseText); //...och sparkar tillbaka htmlkoden till anropet
	}
return null
}

myIP=getHTML("http://whatismyip.com").match(/(\d+\.\d+\.\d+\.\d+)/) //matchar responsetexten från whatismyip.com mot ett ReqExp för ip-nummer
alert(myIP) //visar en alert med ip-nummret i

felet jag får är:

---------------------------
Windows Script Host
---------------------------
Skript:	C:\Sökväg\test.js
Rad:	13
Tecken:	1
Fel:	Ett objekt förväntas.
Kod:	800A138F
Källa: 	Körningsfel i Microsoft JScript

---------------------------
OK   
---------------------------

Rad 13: alert(myIP)

Jag har även provat med att sätta aynkron överföring till true..och provat använda MyXMLReq.onreadystatechange==4 (4 betyder att sidan är färdg laddad) men jag får alltid samma fel. Förutom vid ett tillfälle då det istälelt inte hände något alls.
Den gången hade jag asynkron överföring igång samt använde onreadystatechange.

Vad gör jag för fel?

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Vet inte vad som kan vara fel. När jag testar kodsnutten får jag inga fel rapporterade. Kan det möjligtvis vara annan JS-kod som stör?

En god idé kan dock vara att testa så att inte getHTML() returnerar null innan match() anropas:

function getHTML(url){
	var MyXMLReq=new ActiveXObject("Microsoft.XMLHTTP"); //skapa XMLHTTP-objektet

	if(MyXMLReq){ //Skapat?
		MyXMLReq.open("GET",url,false); //Skapar förfrågan att skicka...
		MyXMLReq.send(); //...skickar förfrågan...
		return(MyXMLReq.responseText); //...och sparkar tillbaka htmlkoden till anropet
	}
return null
}

rt=getHTML("http://whatismyip.com");

if (rt){
    alert(rt.match(/\d+\.\d+\.\d+\.\d+/));
}
colioneMedlem sedan juni 20014 421 inlägg
#3

Att det skulle vara annan js-kod som stör finner jag högst otroligt då jag endast kör den filen och inget annat genom en dubbelklickning....kan det vara något så skumt att en alert inte stöds av windows script host (att det är specifikt för webbläsare)? När jag kör denna i internet explorer fungerar den ju helt felfritt...

R} Jopp, som jag misstänkte fungerar inte alert här, först måste du definiera ett WScript-skal:

var WshShell = WScript.CreateObject("WScript.Shell")

Sedan får du anropa en popup med det värdet genom:

WshShell.Popup(rt.match(/\d+\.\d+\.\d+\.\d+/));

Så slutvärdet blev alltså:

var WshShell = WScript.CreateObject("WScript.Shell");

function getHTML(url){
	var MyXMLReq=new ActiveXObject("Microsoft.XMLHTTP"); //skapa XMLHTTP-objektet

	if(MyXMLReq){ //Skapat?
		MyXMLReq.open("GET",url,false); //Skapar förfrågan att skicka...
		MyXMLReq.send(); //...skickar förfrågan...
		return(MyXMLReq.responseText); //...och sparkar tillbaka htmlkoden till anropet
	}
return null
}

rt=getHTML("http://whatismyip.com");

if (rt){
    WshShell.Popup(rt.match(/\d+\.\d+\.\d+\.\d+/));
}
133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)