来自ajax请求的链接不是通过ajax请求的

时间:2013-03-26 08:04:54

标签: ajax greasemonkey userscripts

我有一个用户脚本通过GM_xmlhttprequest触发一个ajax调用来加载一个带有一些文本和链接到名为“debug”的div的简单页面。这非常有效。现在我想,通过gm_xmlhttprequest请求所请求文档中的每个链接。我不知道为什么我的功能不起作用

    $('.ajax, .ajaxn').click(function(event) {
 event.preventDefault();
 var href = $(this).attr('href');
GM_xmlhttpRequest({
                method: "GET",
                url: href,
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded"
                    },
                        onload: function(response) {
                                $('#debug').html('');
                                $('#debug').append(response.responseText).fadeIn(5000);
                                        }
            });
});

响应中的链接具有类ajaxn,firebug dom / html面板显示响应实际插入到#debug

任何提示?

1 个答案:

答案 0 :(得分:2)

问题不明确,但假设您希望触发click处理程序,如果在#debug内容中点击链接(而不是自动加载链接或???)。

然后不要使用.click()方法。使用jQuery's .on() method会触发当前的以及与选择器匹配的任何节点。

代码变成了:

$(document).on ("click", ".ajax, .ajaxn", function (event) {
    event.preventDefault ();
    var href = $(this).attr('href');

    GM_xmlhttpRequest ( {
        method:     "GET",
        url:        href,
        headers:    {
            "Content-Type": "application/x-www-form-urlencoded"
        },
        onload:     function (response) {
            $('#debug').empty ();
            $('#debug').append (response.responseText).fadeIn (5000);
        }
    } );
} );


另外,请勿使用$('#debug').html('');使用$('#debug').empty();。这将更快,而且代码更自我记录。