Могу ли я добавить параметр в запрос PrototypeJS Ajax, используя Ajax.Responder? - PullRequest
1 голос
/ 13 апреля 2011

Я пытаюсь защитить свои AJAX-вызовы, добавляя маркер сеанса (который будет сопоставлен с cookie-файлом браузера сервером) в качестве параметра к каждому отдельному AJAX-запросу, сделанному из моего веб-приложения.

Я бы не хотел указывать токен в качестве дополнительного параметра в каждом запросе Ajax.Updater(), поскольку это может очень быстро обременительно. Поэтому я подумал, что может быть эффективнее автоматически добавлять этот токен к каждому запросу в глобальном масштабе.

Мне интересно, может ли Ajax.Responder справиться с этим. Кажется, что он должен быть в состоянии перехватить любой Ajax-запрос, прежде чем он будет выполнен, и изменить параметры, чтобы добавить токен до его отправки. Но я понятия не имею, как бы я это сделал. Нужно ли мне создавать прототип Ajax.Responder и записывать дополнительный параметр? Или есть более простой способ?

Мое понимание Ajax.Responder немного слабое, поэтому, если кто-то сможет уточнить, почему это будет или не будет возможно в своем ответе, это будет с благодарностью.

Ответы [ 3 ]

4 голосов
/ 31 июля 2012

Я столкнулся с подобной проблемой и в итоге реализовал простое расширение метода addParameters () для класса Ajax.Request, чтобы выполнить это как для запросов GET, так и для запросов POST.

Вы можете проверить реализацию здесь: https://gist.github.com/3212413.

Обратная связь приветствуется!

1 голос
/ 20 апреля 2011

Prototype устанавливает массив параметров перед вызовом обратных вызовов Responders, поэтому вы не можете просто добавить нужный элемент в хэш параметров. Вы можете добавить свои переменные в URL, например, это будет добавлять случайное число кеша к каждому запросу ...

Ajax.Responders.register({
  onCreate: function(o,x) { 
    o.url += (o.url.include('?') ? '&' : '?') + "rnd=" + Math.floor(Math.random()*1000000000);
  }
});
0 голосов
/ 12 августа 2016

так я реализовал запрос POST, вдохновленный ответом Гэвина :

Ajax.Responders.register({
    onCreate: function(request) { // add form_key to ajax request
        var formKey = $('form_key');
        var parameters = request.parameters;
        parameters.form_key = formKey.value;
        request.options.postBody = Object.toQueryString(parameters);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...