12

问题

我想为 jQuery 处理的全局 ajax 设置一个 ajax 设置

健康)状况:

如果 ajax url 是“www.example.com”,则数据(查询字符串或正文)将附加令牌。


我尝试了两种方法

.ajaxPrefilter

$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {

    // Add data to ajax option
    if (options.url.match(/www\.example\.com/i) !== null) {
        originalOptions.data.token = 'i_am_token'
    }

});

当 url 为 www.example.com-> 时添加令牌不起作用!

在控制台/调试器 originalOptions 对象中添加了令牌属性,但发送的请求没有令牌参数

.ajaxSetup / beforeSend 事件

$.ajaxSetup({
    beforeSend: function(jqXHR, settings) {

        // Only GET Method
        if (settings.url.match(/www\.example\.com/i) == null){
            settings.url.replace(/((\.\/[a-z][0-9])*\?+[=%&a-z0-9]*)&?token=[a-z0-9]*&?([=%&a-z0-9]*)/gi, "$1$3")
        }

    },
    data: {
        token: 'i_am_token'
    }
});

和一个反向解析,为每个 ajax 请求添加令牌。

与上一个相同,settings.url 由控制台/调试器中的字符串替换更改。但请求仍然发送原始网址。


在 jsfiddle 中测试:http: //jsfiddle.net/qVLN2/2/

感谢您的阅读和帮助:)

4

1 回答 1

10

您应该注意到String.replace函数不会影响原始字符串!

您可以尝试settings.url = settings.url.replace(....);在您的代码中使用。

于 2013-11-27T23:02:40.070 回答