0

リクエストを検証できるように、追加のトークン値をWebサイトに渡す必要があります。

値を追加する関数は次のとおりです。

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 に答える