Dimitri Vorontzov
Dimitri Vorontzov

Reputation: 8104

XMLHttpRequest connection check

I am trying to write a streamlined version of a XMLHttpRequest demo script shown here:

http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first

I'm only going to use this on iPad, so I don't have to check for older versions of IE, and so on. On button click, I want to check if the connection exists. Here's my entire html page, including JavaScript snippet:

<html>
<head>
<script>
var myURL = "http://www.google.com";

function testConnection(url) {
    var xmlhttp;

    xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            alert("Connected!");
        } else {
            alert("Not connected!");
        }
    }
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
}
</script>
</head>
<body>


<button type="button" onclick="testConnection(myURL)">Test Connection</button>

</body>
</html>

For some weird reason, even though I'm online, when I click the button, I get repeated "Not connected" alerts, and only after a while I get the "Connected" alert, followed by no alerts.

Looks like I messed up, but I can't see where. What should I change to make it work?

Upvotes: 0

Views: 8711

Answers (1)

Jan Turoň
Jan Turoň

Reputation: 32922

If you can use xhr2, you can learn stuff from this tutorial and rewrite your code to something like this:

function testConnection(url) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onload = function() { alert("Connected!"); }
    xmlhttp.onerror = function() { alert("Not Connected"); }
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
}

If you send request to another domain, you may get error even if it exists, if the target server has Same-Domain-Policy restriction (default). If the target server is on another domain, it must send header

Access-Control-Allow-Origin: *

Upvotes: 3

Related Questions