Создание формы с помощью jQuery, сессионные переменные исчезли после обычной отправки - PullRequest
2 голосов
/ 07 марта 2011

У меня есть следующие jQuery js для вставки формы на мой взгляд (в application.js):

$("#add_new_quote").click(function() {
    $(".quote:first").prepend("<form action=\"" + window.location + "\" accept-charset=\"UTF-8\" method=\"post\"> " +
        "Quote: <input id=\"quote_text\" name =\"quote_text\" type=\"text\" maxlength='145' size='100'>" +
        "<input name=\"submit\" type=\"submit\" value=\"Add\">" +
        "</form>" +
        "<br>");
});

Когда я нажимаю на кнопку отправить, все установленные мной сеансовые переменные как-то теряются, и я понятия не имею, почему и как. Например, я устанавливаю идентификатор пользователя в переменной сеанса (session [: user_id]) для ссылок, и после отправки он остается пустым. Я попытался добавить форму, используя form_tag в представлении, и она работает нормально, так что, я думаю, я упускаю что-то важное ...

Я использую Rails 3 и jQuery 1.5.

Ответы [ 3 ]

1 голос
/ 19 июня 2011

если вы добавите это, он установит токен CSRF ...

// ahead of the form string
var token = $('meta[name="csrf-token"]').attr('content');

// then in the form string
"<input name='authenticity_token' type='hidden' value='" + token + "'/>"

Это должно решить проблему, если вы не можете использовать AJAX, который сделает это за вас.

0 голосов
/ 08 марта 2011

Очевидно, что когда я отправляю созданную вручную форму с помощью jQuery, Rails не добавляет токен аутентификации в параметры POST, поэтому «проблема», вероятно, вызвана функцией безопасности в Rails, которая очищает сеанс.Альтернативой является использование form_tag для создания формы в представлении, использование jQuery для скрытия () ее при загрузке страницы и использование toggle () для отображения / скрытия формы, когда пользователь нажимает на ссылку или кнопку.Спасибо Димитрию и Моим Слишком коротким за помощь.

0 голосов
/ 07 марта 2011

Попробуйте сериализовать вашу форму и отправить ее по ajax.

http://api.jquery.com/serialize/

...