J'ai adapté un plugin Jquery pour remplir mes besoins afin d'envoyer des requêtes GET aux serveurs afin de les "pinguer".Ajax ne déclenche pas d'événement de modification sur un navigateur basé sur Webkit
J'ai également ajouté du code javascript pour ajouter quelques caractéristiques de fantaisie comme: en fonction de la valeur modifiée dans un span que le plugin Jquery change, il change l'icône en conséquence. Pour que tout fonctionne essentiellement, j'ai fait en sorte que lorsque Ajax obtient un événement "complet", il force un événement "onChange" à l'intervalle, déclenchant la fonction de validation javascript pour changer les icônes d'état.
Voici le code de mon plugin jQuery légèrement modifié:
/**
* 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(); est le code qui déclenche l'événement « onchange » dans la durée:
echo " <td class=\"center\"><span id=\"ping$pingNb\" onChange=\"checkServerIcon(this)\" >" .$server['IP'] . "</span></td>";
Dans Firefox cela fonctionne, checkServerIcon (cela) est exécuté et passe l'objet span à la fonction.
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';
}
}
}
La chose est que, dans de plugin jQuery, la L'action target.change() ne déclenche pas du tout l'événement onChange. (dans un navigateur basé sur Webkit) – Carroarmato0
pour être plus précis: si je fais ce qui suit dans un navigateur basé sur Webkit, target.change(); alerte ("Les singes"); l'alerte est affichée, mais cela ne déclenche: onChange = « checkServerIcon (this) » j'ai vérifié qu'en ajoutant ce qui suit comme la première action à l'intérieur de la fonction checkserverIcon: alerte (« attaquent ») Et rien ne se passe. – Carroarmato0
essayez ce que dit @Stino, utilisez la méthode de jQuery pour lier onchange >> $ ('your-span').change (checkServerIcon); – Shiki