0

我必须向网站传递一个额外的令牌值,以便我可以验证请求。

添加值的函数是这样的:

AddPageTokenToAjaxRequest = function (data)
{
    data.hfPageToken = $('#hfPageToken').val();
    return data;
};

,它必须像这样使用:

function asociate(id)
{


    $.ajax({
        url: postbackURL, 
        type: 'POST',
        data: AddPageTokenToAjaxRequest( { id: id} ),
        success: function (result)
        {
            refresh();
        }
    });
}

问题是我不想在大约 100 个这样的调用中更改代码。有没有办法覆盖发送 ajax 调用的数据,这样我就不必进行 100 次更改?

4

2 回答 2

1

您可以在发送之前使用jQuery.ajaxSend()修改您的数据吗?

每当即将发送 Ajax 请求时,jQuery 都会触发 ajaxSend 事件。此时会执行已使用 .ajaxSend() 方法注册的所有处理程序。

类似于(伪代码):

var modify = function(event, jqXHR, ajaxOptions)
{
    ajaxOptions.data = AddPageTokenToAjaxRequest( { id: ajaxOptions.data} )
}
$.ajaxSend(modify(e, jqXHR, opts));

只是一个想法。似乎它可能会起作用。

于 2012-10-09T07:21:53.007 回答
0

在看到 Polymorphix 的回答后,我又进行了一次搜索,并在这里找到了这段代码: https ://stackoverflow.com/a/12116344/249895

$(document).ready(function ()
{
    var securityToken = $('#hfPageToken').val()
    $('body').bind('ajaxSend', function (elm, xhr, s)
    {
        if (s.hasContent && securityToken)
        {   // handle all verbs with content
            var tokenParam = "hfPageToken=" + encodeURIComponent(securityToken);
            s.data = s.data ? [s.data, tokenParam].join("&") : tokenParam;
            // ensure Content-Type header is present!
            if (s.contentType !== false || options.contentType)
            {
                xhr.setRequestHeader("Content-Type", s.contentType);
            }
        }
    });
});

我对此进行了测试,效果很好。

于 2012-10-09T07:29:52.570 回答