Изменение ajax-запроса jQuery, перехваченного через ajaxSend () - PullRequest
2 голосов
/ 25 февраля 2010

Я использую ajaxSend () для перехвата запросов, исходящих от плагина jQuery на моей странице, а затем отфильтровываю несущественные запросы, используя URL-адрес ajaxOptions.

$('some-selector').ajaxSend(function(e, xhr, settings) {
    var ajaxUrl = settings.url;
    if (ajaxUrl.search('targetpage.aspx') == 0) {
         //need to add an additional parameter to my request here
    } 
}

Мне нужно вставить дополнительный параметр в соответствующие запросы. Можно ли изменить запрос в этот момент?

Ответы [ 3 ]

4 голосов
/ 25 февраля 2010

Вы можете добавить параметр в хеш settings.data, проверив, что он не равен нулю ранее:

if (settings.data == null) {
    settings.data = { };
}
settings.data['param'] = 'value';

или просто изменив URL:

settings.url += (settings.url.match(/\?/) ? "&" : "?") + 'param=value';
2 голосов
/ 09 июля 2012

Это старый вопрос, но я пришел сюда из Google и подумал, что другие люди, ищущие то же самое, должны иметь работающее решение. Я попробовал предложенный ответ, но он не работает. Изменение данных в обработчике ajaxSend не меняет того, что отправляется.

Моя цель была такой же, как у OP, вставить дополнительный параметр в запросы.

Итак, я разработал для него хакерское решение: переопределить метод jQuery ajax. Просто замените «injected_param» и «injected_value» в соответствии с вашими потребностями. Я добавил несколько охранников, чтобы проверить, присутствует ли параметр или нет, на всякий случай.

$(function() {

        var jqAjax = $.ajax;
        $.ajax = function (settings, settingsObj) {

            if (typeof(settings) == "string") {
                settingsObj.url = settings;
                settings = settingsObj;
            }

            if (!settings.data) { 
                settings.data = {};
            }

            if (typeof(settings.data) == "string" && settings.data.indexOf("&injected_param=") < 0) {
                settings.data += "&injected_param=injected_value";
            }

            else if (!settings.data.injected_param) {
                settings.data.injected_param = "injected_value";
            }


            jqAjax (settings);
        };
    });
0 голосов
/ 30 октября 2014

Или:

//Interrupt AJAX requests and switch out the URL.
jQuery(document).bind('ajaxSend', function(event, xhr, params) {

    event.preventDefault();

    //Make sure this isn't one we've already modified, or it will loop infinitely
    if (!~params.url.search("http://www.example.com")) {

        //This is an untainted url, so change it.
        params.url = "http://www.example.com";

        //Send the request again with the new parameters.
        jQuery.ajax(params);
    }

    return false;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...