如果端口打开则为ajax图像,如果未打开则为备用图像

时间:2013-09-01 02:52:24

标签: php javascript jquery ajax

所以我正在尝试为我的网站创建一个自定义脚本,我正在寻找一个状态脚本。现在我已经做了一些研究,但是我已经取消了我所拥有的东西,直到我能找到更好的东西。

我目前正在使用fopen来检查端口是否打开,但是它会大大减慢页面加载时间,我想知道是否有办法做到这一点是jquery和ajax。允许页面首先加载,然后在端口打开时显示图像,如果关闭或无法访问则显示备用图像。

我之前见过它,我似乎无法找到任何关于此的文档。

1 个答案:

答案 0 :(得分:0)

加载页面,向您的页面发送ajax请求以检查它是否已打开。

$.getJSON('checkstatus.php', {
    port: 8070
}, function (data) {
    if (data.status === 'on') {
        $('#img').attr('src', 'on.png');
    } else {
        $('#img').attr('src', 'off.png');
    }
});

<?php
......code.....

header('content-type: application/json');
echo json_encode(array('status'=>get_port_status($_GET['port'])));

编辑:

//checkstatus.php
<?php
$host = $_GET['host'];
$ports = array(PORT 1, PORT 2, PORT 3, PORT 4, PORT 5, PORT 6, PORT 7, PORT 8, PORT 9);
$status = array();
foreach($ports as $port) {
    $connection = @fsockopen($host, $port);
    if (is_resource($connection)) {
        $[$port] = 'on';
        fclose($connection);
    } else {
        $[$port] = 'off';
    }
}

header('content-type: application/json');
echo json_encode($status);
?>

///status.html
<table id="portStatus">
   <tbody></tbody>
</table>

<script>
$(function () {
    var table = $('#portStatus tbody');
    var hosts = ['host1.com', 'host2.com'];
    for (var i = 0; i < hosts.length; ++i) {
        var host = hosts[i];
        $.getJSON('checkstatus.php', {
            host: host
        }, function (data) {
            var tr = $('<tr/>');
            tr.append($('td').html(host)); //this appends the hostname to the td;
            for (var port in data) {
                tr.append($('<td><img src="' + (data[port] === 'on' ? 'accept.png' : 'error.png') + '"></td>');
                }
                table.append(tr);
            });
        }
    });
</script>

这应该给你一个基本的想法,尝试并修改它。 注意,javascript部分使用jQuery。