Почему запрос ajax здесь не запускается? - PullRequest
0 голосов
/ 02 апреля 2011

Итак, у меня есть поле автозаполнения, где пользователь может выбрать существующий или создать новый тег.Если пользователь создает новый тег, он нажимает кнопку формы и отправляет запрос POST в действие обновления в контроллере видео, который обрабатывает запрос как AJAX, и тег отображается над полем.

Теперь проблема в том, когда пользователь выбирает тег из списка предложений.По умолчанию плагин автозаполнения пользовательского интерфейса jQuery добавляет выбранный элемент в поле, а затем пользователь должен нажать кнопку формы.Тем не менее, я хочу сэкономить пользователю некоторые усилия, автоматически добавляя тег сразу после его выбора из предложенного списка.Поэтому у меня есть этот код в моем файле application.js:

select: function(event, ui) {
           var url = $('.edit_video').attr('action');
           var val = ui.item.topic.name;
           $.ajax({type:"PUT", url:url, data:{video:{topic_names:val}}});
           return false;
        }

, который успешно отправляет запрос PUT на действие обновления, когда элемент выбирается из списка.Тем не менее, запрос НЕ обрабатывается как AJAX.Тег успешно добавлен, но только после обновления страницы.Я хочу, чтобы запрос был обработан как AJAX.Как я могу это сделать?

Я предполагаю, что проблема связана с тем, что когда вы нажимаете кнопку формы, опция :remote => true заставляет рельсы искать format.js (который у меня естьв моем действии обновления), но когда кнопка не нажата, и элемент выбран из списка, Rails не знает, искать JS.Как я узнаю об этом?

Ответы [ 4 ]

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

Использование dataType: 'script' в вашем Ajax-запросе должно помочь.

.
.
$.ajax({type:"PUT", url:url, dataType: 'script', data:{video:{topic_names:val}}});
.

Это добавит правильные заголовки, чтобы рельсы распознали правильный формат ответа.

0 голосов
/ 02 апреля 2011

Я бы проверил, привязано ли что-либо еще к $ ('. Edit_video') в Firefox.Возможно, вы отправляете форму.

Кроме того, JS может быть отключен в браузере, поэтому он будет не-AJAX.

Наконец, убедитесь, что у вас есть jQuery и <% = csrf_meta_tag%> в файле макета.Удачи.

0 голосов
/ 02 апреля 2011

Я предполагаю, что под чем-то, что не обрабатывается как AJAX, вы имеете в виду, что это не файл view.js.erb, а файл view.html.erb.Вы можете исправить это, принудительно задав формат URL-адреса в своем JS следующим образом:

var url = $('.edit_video').attr('action') + ".js";

После этого он будет отправлен в нужный формат для вашего действия.

0 голосов
/ 02 апреля 2011

'protect_from_forgery' может остановить вас от поста. Вы можете проверить это с Firebug (с Firefox).

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