2009-07-26 14 views
0

Hier ist mein Javascript-Code, der Google für alle 10 Sekunden ping und den Verbindungsstatus zu HTML MonitorInformation Element anzeigen. Aber wenn ich auf die HTML-Datei klicke, um zu debuggen, ist die Information, die am MonitorInformation Element angezeigt wird, immer "Verbinden ... warten". Ich habe für einige Zeit debugged, kann aber nicht herausfinden. Irgendwelche Ideen was ist falsch mit meinem Code?Javascript Verbindung mit Website-Code funktioniert nicht

Html-Code:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<script src="Monitor.js" type="text/javascript"></script> 
    <title>Web Site Monitor</title> 
</head> 
<body onload="setup()"> 
<div id="MonitorInformation">Connecting...wait</div> 
</body> 
</html> 

Java-Script-Code:

function setup() { 
    window.setInterval(PingWebSite, (10 * 1000)); 
} 

function PingWebSite() { 
    conObj = new ActiveXObject("Msxml2.XMLHTTP"); 
    conObj.open("GET", "http://www.google.com", true); 
    conObj.onreadystatechange = function() { 
    if (conObj.readyState === 4) { 
     if (conObj.status === 200) {  
       loading.innerText = "Service is available";    
      } else { 
       MonitorInformation.innerText = "Service is not available"; 
      } 
     } else { 
      MonitorInformation.innerText = "Connecting to www.google.com ..."; 
     } 
    } 
} 

EDIT 1: meine fix JSON mit

function setup() { 
    window.setInterval(PingWebSite, (10 * 1000)); 
} 

function PingWebSite() { 

    var http_request = new XMLHttpRequest(); 
    http_request.open("GET", "http://www.google.com", true); 
    http_request.send(null); 
    http_request.onreadystatechange = function() { 
     if (http_request.readyState == 4) { 
      if (http_request.status == 200) { 
       MonitorInformation.innerText = "Connection ok"; 
       alert("ok"); 
      } else { 
      MonitorInformation.innerText = "Connection fail"; 
      alert("fail"); 
      } 
      http_request = null; 
     } 
    }; 
} 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<script src="Monitor.js" type="text/javascript"></script> 
    <title>Web Site Monitor</title> 
</head> 
<body onload="setup()"> 
<div id="MonitorInformation">Connecting...wait</div> 
</body> 
</html> 

Vielen Dank im Voraus, George

+1

JSON wird nicht funktionieren, Sie müssen JSONP verwenden, das funktioniert nur, wenn der Dienst, den Sie treffen, es bereitstellt. – FlySwat

+0

Ich bin verwirrt FlySwat, aber mein Posted Code in EDIT 1 Abschnitt mit JSON funktioniert. Irgendwelche Kommentare? – George2

Antwort

1

Sie können Domain XHR, für die Sie keinen Zugriff auf AFAIK haben, nicht überschreiten.

+0

Ich bin überrascht. Ich kann JavaScript-Code nicht verwenden, um eine Seite von einer anderen Website zu erhalten und eine Verknüpfung zu meiner Website herzustellen. – George2

+0

Danke seelscratch, ich habe dieses Problem mit JSON behoben, könntest du meinen Code bitte überprüfen? (Ich habe Funktion getestet, aber Überprüfung von Guru wie Sie macht mich selbstbewusster. :-)) Bitte bezieht sich auf EDIT 1 Abschnitt meines Codes. – George2

2

Sie können keine Verbindung zu einer Site außerhalb Ihrer URL herstellen. Sofern Ihr Code nicht in der google.com-Domain enthalten ist, funktioniert er nicht.

Dies ist eine Browser-Sicherheitsposition ‚Same Origin Policy‘ genannt http://en.wikipedia.org/wiki/Same_origin_policy

Wenn Sie Cross-Site tun möchten Anrufe wie, dass Sie JSONP verwenden müssen http://en.wikipedia.org/wiki/JSON wie Sie das tun können.

+0

Vielen Dank AutomatedTester, ich habe dieses Problem nach Ihrem Ratschlag behoben, könnten Sie bitte meinen festen Code überprüfen? (Ich habe Funktion getestet, aber Überprüfung von Guru wie Sie macht mich selbstbewusster. :-)) Bitte bezieht sich auf EDIT 1 Abschnitt meines Codes. – George2

1

Sie können dies mit einem versteckten iFrame tun, um die Beschränkungen der Cross-Domain zu umgehen. Ein kurzes Beispiel Sie, um loszulegen:

(HTML Snippet)

<body> 
    <div style="display: none;"> 
     <iframe id='hiddenFrame'></iframe> 
    </div> 
</body> 

Javascript:

function setup() 
{ 
    var iFrame = document.getElementById('hiddenFrame'); 
    var changeEvent = function() 
    { 
     loading.innerText = "Service is Available"; 
    } 
    // IE 
    iFrame.onload = changeEvent; 
    // Firefox 
    iFrame.onreadystatechange = changeEvent; 

    setInterval(PingWebSite, (10 * 1000)); 
} 

function PingWebSite() { 
    var iFrame = document.getElementById('hiddenFrame'); 
    iFrame.src = 'http://www.google.com'; 
} 
+0

Danke FlySwat! Ich lerne über Cross-Site-Sicherheitsrichtlinie von Wiki Pedia (http://en.wikipedia.org/wiki/Same_origin_policy), und ich bin verwirrt über diese Aussage - "die Richtlinie erlaubt Skripts auf Seiten von der gleichen Website laufen auf Zugriff auf die Methoden und Eigenschaften des anderen ", bin ich verwirrt über (1) läuft auf Seiten bedeutet Javascript oder andere Skripte im clientseitigen Browser laufen zu lassen? (2) Was bedeutet "Methoden und Eigenschaften des anderen"? Ich greife auf URL-nicht-Zugriffseigenschaft wie die InnerText-Eigenschaft von DIV zu. Schätzen Sie, wenn Sie klären könnten. :-) – George2

1

Könnte es sein, dass Sie ein Semikolon vergessen? Beispiel: ... body onload = "setup();" ...