使用AJAX检查远程站点是否在线?

时间:2014-01-12 05:17:54

标签: javascript php jquery ajax curl

我的网站使用PHP的cURL检查5个不同的URL,以判断它们是否在线。问题是加载页面需要很长时间(特别是如果其中一个网站正在检查它已经关闭)。

我听说jQuery的ajax运行良好,所以我尝试了这段代码:

<div class="alert alert-info" id="forum-blockland-us"><b>Checking...</b></div>
<script>
$.ajax({ type: "GET",
    url: "http://forum.blockland.us/",
    cache:false,
    success: function() { 
        $("#forum-blockland-us").addClass("alert-success");
        $("#forum-blockland-us").removeClass("alert-info");
        $("#forum-blockland-us").html("<b>Online</b>");
    },
    error: function() {
        $("#forum-blockland-us").addClass("alert-danger");
        $("#forum-blockland-us").removeClass("alert-info");
        $("#forum-blockland-us").html("<b>Offline</b>");
    }
});
</script>

但它总是会返回错误,即使我100%知道这些网站是在线的。

2 个答案:

答案 0 :(得分:8)

如果该网站是远程网站,由于Same Origin Policy,您很有可能无法通过javascript实现该网站。

然而,在php中,你只能提出一个HEAD请求,因此它不会加载内容,所以它会更快,更快。

希望这会有所帮助。干杯

答案 1 :(得分:2)

正如@Edgar所说,你最好通过php来做,如果你愿意,这就是:

function urlExists($url=NULL)  
{  
    if($url == NULL) return false;  
    $ch = curl_init($url);  
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);  
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
    $data = curl_exec($ch);  
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
    curl_close($ch);  
    if($httpcode>=200 && $httpcode<300){  
        return true;  
    } else {  
        return false;  
    }  
}

Source