我已经调整了一个Jquery插件来满足我的需求,将GET请求发送到服务器,作为“ping”它们的方式。
我还添加了一些javascript代码来添加一些奇特的功能,例如:根据Jquery插件更改的范围中更改的值,它会相应地更改Icon。
为了使一切工作本质上,我做了这样,当Ajax得到一个“完整”事件时,它强制一个“onChange”事件到span,触发javascript验证函数来改变状态图标。
这是我稍加修改的jQuery插件的代码:
/**
* ping for jQuery
*
* Adapted by Carroarmato0 (to actually work instead of randomly "pinging" nowhere instead of faking
*
* @auth Jessica
* @link http://www.skiyo.cn/demo/jquery.ping/
*
*/
(function($) {
$.fn.ping = function(options) {
var opts = $.extend({}, $.fn.ping.defaults, options);
return this.each(function() {
var ping, requestTime, responseTime ;
var target = $(this);
var server = target.html();
target.html('<img src="img/loading.gif" alt="loading" />');
function ping() {
$.ajax({url: 'http://' + server,
type: 'GET',
dataType: 'html',
timeout: 30000,
beforeSend : function() {
requestTime = new Date().getTime();
},
complete : function() {
responseTime = new Date().getTime();
ping = Math.abs(requestTime - responseTime);
if (ping > 2000) {
target.text('niet bereikbaar');
} else {
target.text(ping + opts.unit);
}
target.change();
}
});
}
ping();
opts.interval != 0 && setInterval(ping,opts.interval * 1000);
});
};
$.fn.ping.defaults = {
interval: 3,
unit: 'ms'
};
})(jQuery);
target.change();是在span中触发“onchange”事件的代码:
echo " <td class=\"center\"><span id=\"ping$pingNb\" onChange=\"checkServerIcon(this)\" >" .$server['IP'] . "</span></td>";
在Firefox中可行,checkServerIcon(this)会被执行并将span对象传递给函数。
function checkServerIcon(object) {
var delayText = object.innerHTML;
var delay = delayText.substring(0, delayText.length - 2);
if ( isInteger(delay) ) {
object.parentNode.previousSibling.parentNode.getElementsByTagName('img')[0].src = 'img/servers/enable_server.png';
} else {
if (delay == "bezig.") {
object.parentNode.previousSibling.parentNode.getElementsByTagName('img')[0].src = 'img/servers/search_server.png';
} else {
object.parentNode.previousSibling.parentNode.getElementsByTagName('img')[0].src = 'img/servers/desable_server.png';
}
}
}
答案 0 :(得分:0)
我猜你可以尝试使用jQuery的checkServerIcon内置方法:
$(object).parent().prev().parent().find('img:first').attr({src: 'image-source-here'});
浏览器之间可能存在一些可以通过使用jQuery方法修复的怪癖。
答案 1 :(得分:0)
使用JQuery更改方法而不是javascript onchange target.change()只会触发jquery的有界函数
答案 2 :(得分:0)
以下是解决方案:
我从我的span中删除了onchange事件,而是给了它一个类名:
echo " <td class=\"center\"><span class=\"ping\" id=\"ping$pingNb\">" .$server['IP'] . "</span></td>";
接下来,我让jQuery自己添加更改事件:
<script type="text/javascript">
$(document).ready(function(){
$("span.ping").change(checkServerIcon);
});
</script>
我的javascript函数必须重写:
function checkServerIcon() {
var tr = $(this).parent().parent();
var img = tr.find('td>img').first().attr('src');
var delayText = tr.find('td>span').text();
var delay = delayText.substring(0, delayText.length - 2);
if ( isInteger(delay) ) {
tr.find('td>img').first().attr('src','img/servers/enable_server.png');
} else {
if (delay == "bezig.") {
tr.find('td>img').first().attr('src','img/servers/search_server.png');
} else {
tr.find('td>img').first().attr('src','img/servers/desable_server.png');
}
}
}
现在代码适用于基于Firefox和Webkit的浏览器,例如Google Chrome:)