Нашел странный баг (возможно). Когда я отправляю параметры в $ .ajax в виде хэша и пытаюсь проверить эти параметры в $ .ajaxSend, я обнаружил, что settings.data имеет значение null, settings.url был нормальным с включенными параметрами. Затем я заглянул внутрь кода jQuery и обнаружил, что данные стерты.
// If data is available, append data to url for get requests
if ( s.data && type == "GET" ) {
s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
// IE likes to send both get and post data, prevent this
s.data = null;
}
Теперь мне нужно разобрать url ((. Что делать?
Вот в комментариях я вижу, что данные должны быть там.

По умолчанию все, что передается как данные, не являющиеся строкой, обрабатывается и преобразуется в строку запроса. Итак, если вы используете POST, чтобы пропустить ошибку:
$.post({
url: "http://yourserver/ajax" ,
data: {param1: 'val1', param2:'val2'}
});
в $.ajaxSend значение settings.data будет 'param1=val1¶m2=val2', и вам нужно будет проанализировать параметры, как с GET.
Если вы хотите избежать синтаксического анализа URL-адреса или данных, просто добавьте копию данных при создании объекта настроек. Дополнительный параметр не должен вызывать никаких проблем.
var data = {param1: 'val1', param2:'val2'};
$.get({
url: "http://yourserver/ajax" ,
data: data,
dataCopy: data
});
Затем в $.ajaxSend вы можете проверить значения в settings.dataCopy.