覆盖来自javascript的所有请求

覆盖来自javascript的所有请求,javascript,jquery,asp.net,Javascript,Jquery,Asp.net,我有一个asp.net应用程序。我需要实现对服务器的每个页面请求都将在查询字符串中包含一个附加参数。我的想法是捕获javascript中的所有请求并添加此参数 我可能会对每个链接使用jQuery选择器,并将其更改为href,然后覆盖jQuery ajax以将此参数添加到请求中,但这不是最佳解决方案 这在JS中可能吗 谢谢, Bartek对于锚定标签,它将简单到: $(document).delegate('a', 'click', function() { this.href = (th

我有一个asp.net应用程序。我需要实现对服务器的每个页面请求都将在查询字符串中包含一个附加参数。我的想法是捕获javascript中的所有请求并添加此参数

我可能会对每个链接使用jQuery选择器,并将其更改为href,然后覆盖jQuery ajax以将此参数添加到请求中,但这不是最佳解决方案

这在JS中可能吗

谢谢,
Bartek

对于锚定标签,它将简单到:

$(document).delegate('a', 'click', function() {
    this.href = (this.href.indexOf("?") > -1 ? '&' : '?') + 'magicParam=4';
});
如果您使用的是jQuery1.7,那么您可以这样做

$(document).on('click', 'a'function() {
    this.href = (this.href.indexOf("?") > -1 ? '&' : '?') + 'magicParam=4';
});

如果您想考虑表单、Ajax请求等,则必须单独管理它们。当然,如果您有一个

window.location.href=blahblahblah
,则这两个功能都无法满足


如果您想处理AJAX请求,jQuery有一个很好的
beforeSend
方法,您可以将该方法添加到您的中,以修改所有的
url

$(document).delegate('a', 'click', function() {
    this.href = (this.href.indexOf("?") > -1 ? '&' : '?') + 'magicParam=4';
});
如果您使用的是jQuery1.7,那么您可以这样做

$(document).on('click', 'a'function() {
    this.href = (this.href.indexOf("?") > -1 ? '&' : '?') + 'magicParam=4';
});

如果您想考虑表单、Ajax请求等,则必须单独管理它们。当然,如果您有一个

window.location.href=blahblahblah
,则这两个功能都无法满足


如果您想处理AJAX请求,jQuery有一个很好的
beforeSend
方法,您可以将该方法添加到您的中,以修改所有的
url

您可以向页面上的每个链接添加事件处理程序:

//use jQuery 1.7's `.on()` to bind the event handler
$('a').on('click', function (e) {

    //stop the default click from happening
    e.preventDefault();

    //setup the extra query-string parameter
    var extra = '?your_extra=true';

    //if the link clicked already has a query-string then use an ampersand rather than a question mark
    if (this.href.indexOf('?') > 0) {
        extra = '&your_extra=true'
    }

    //direct the user to the requested page
    window.location = this.href + extra;
});

您可以使用
beforeSend
函数在发送AJAX请求之前更改它们:

您可以向页面上的每个链接添加事件处理程序:

//use jQuery 1.7's `.on()` to bind the event handler
$('a').on('click', function (e) {

    //stop the default click from happening
    e.preventDefault();

    //setup the extra query-string parameter
    var extra = '?your_extra=true';

    //if the link clicked already has a query-string then use an ampersand rather than a question mark
    if (this.href.indexOf('?') > 0) {
        extra = '&your_extra=true'
    }

    //direct the user to the requested page
    window.location = this.href + extra;
});


您可以使用
beforeSend
函数在发送AJAX请求之前更改它们:

我很好奇您为什么需要这个?一块饼干是不够的?唯一的方法是按照你已经建议的方法;修改所有锚定标记,然后修改ajax调用中的url参数。@gilly3会话和cookie在选项卡之间共享。我需要为查询参数添加一个id来指定上下文我很好奇为什么需要这个?一块饼干是不够的?唯一的方法是按照你已经建议的方法;修改所有锚定标记,然后修改ajax调用中的url参数。@gilly3会话和cookie在选项卡之间共享。我需要为查询参数添加一个id来指定上下文。您不想使用click事件而不是keydown吗?@AbeMiessler:是的,不确定我为什么键入:PI假设这会发生在文档就绪时。动态加载的html呢?@bodziec:不,因为我们使用事件委派,这也适用于所有动态添加的元素。您不想使用click事件而不是keydown吗?@AbeMiessler:是的,不确定我为什么键入:PI假设这会发生在文档就绪时。动态加载的html呢?@bodziec:不,因为我们使用的是事件委派,这也适用于所有动态添加的元素。这需要稍微修改。事实上,如果你的链接已经有一个查询字符串,它将变成
?oldquery=foo&your\u extra=true?your\u extra=true
。我相信它会工作得很好。如果找不到查询字符串,则使用
extra
变量的默认值;如果找到查询字符串,则覆盖默认值以使用符号。我假设在文档准备就绪时会发生这种情况。关于动态加载的html呢?您可以使用
.on()
像折旧的
.delegate()
这样:
$(文档)。在('click','a',function(){…})
上,您可以用解析此代码时DOM中链接的任何父元素替换
文档
。这需要稍微修改。事实上,如果你的链接已经有一个查询字符串,它将变成
?oldquery=foo&your\u extra=true?your\u extra=true
。我相信它会工作得很好。如果找不到查询字符串,则使用
extra
变量的默认值;如果找到查询字符串,则覆盖默认值以使用符号。我假设在文档准备就绪时会发生这种情况。那么动态加载的html呢?您可以使用
.on()
像折旧的
.delegate()
这样:
$(document)。在('click','a',function(){…})
上,您可以用解析此代码时DOM中链接的任何父元素替换
document