Как добавить параметр для вызова AJAX с помощью JQuery? - PullRequest
1 голос
/ 02 ноября 2009

Я хочу, чтобы URL можно было вызывать либо стандартным HTTP GET, либо вызовом AJAX.

Сервер должен обрабатывать запрос несколько иначе, в зависимости от того, был ли запрос AJAX-запросом или нет.

Используя jQuery, я хочу автоматически добавить параметр ко всем AJAX-запросам, которые я делаю, чтобы сервер мог их идентифицировать, и без необходимости добавлять параметр везде, где я выполняю вызов.

Я пытался сделать это с помощью обработчика событий jQuery.ajaxSend, но на этом этапе XMLHttpRequest уже создан, и внесение изменений в URL-адрес или данные-члены объекта ajaxOptions не оказывает никакого влияния, и я знаю, как надежно манипулировать объектом XMLHttpRequest (я могу проверить его в Firebug, но не знаю, чего ожидать от работы в кросс-браузерном режиме).

Как мне этого добиться? Есть ли лучший способ идентифицировать запросы AJAX?

Ответы [ 2 ]

2 голосов
/ 02 ноября 2009

Я думаю, что было бы лучше и проще проверить заголовок x-requested-with со значением, установленным на XMLHttpRequest на стороне сервера, чтобы отличать запросы ajax от обычных. Примечание: этот заголовок очень легко подделать. Вот простой пример PHP:

function isAjax() {
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
         ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));
}

if(isAjax()) { 
    // do something
} else {
    // do something else, or nothing
}
1 голос
/ 02 ноября 2009

Просто создайте свою собственную функцию, которая вызывает $.ajax, но добавляет ее в:

function myAjax(opts) {
    opts.data = opts.data || {};  // make sure it exists
    opts.data.myParam = "42";
    $.ajax(opts);
}

Тогда позвони в другое место. Как говорит karim79, вы также можете проверить заголовок X-Requested-With: XMLHttpRequest. Но да, оба способа довольно легко подделать, так что возьмите то, что клиент отправляет вам с недоверием.

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