一千萬個為什麽

搜索

Ajax不會在基於webkit的瀏覽器上觸發更改事件

我已經調整了一個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('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();是觸發跨度中“onchange”事件的代碼:

echo "  <td class=\"center\">" .$server['IP'] . "</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';
        }
    }

}

最佳答案

我想你可以嘗試使用jQuery的checkServerIcon內置方法:

$(object).parent().prev().parent().find('img:first').attr({src: 'image-source-here'});

瀏覽器之間可能存在一些可以通過使用jQuery方法修復的怪癖。

轉載註明原文: Ajax不會在基於webkit的瀏覽器上觸發更改事件