Вызов $ .ajax () не работает, как я хотел бы - PullRequest
1 голос
/ 16 марта 2011

Итак, я делаю этот ajax-вызов:

$.ajax({
   type: "POST",
   url: "/videos",
   data: { title: oembed.title }
});

внутри этого вызова функции для Embedly API:

$('a.oembed').embedly({maxWidth:300,'method':'replace'}).bind('embedly-oembed', function(e, oembed){ 
});

Теперь есть две вещи не так с тем, как этот $ .ajax () звонок работает.Во-первых, он вызывает каждый раз, когда я загружаю представление index, что имеет смысл, потому что именно там я указываю URL.Тем не менее, я хочу, чтобы он вызывался только один раз при создании видео, и я не знаю, как указать его на метод create.

Во-вторых, вызов ajax просто добавляет пустойстрока в базе данных и заголовок, который динамически генерируется API-интерфейсом embedly и сохраняется в хеше oembed (селектор находит ссылку на видео в моем представлении и превращает ее во встроенное видео, а также сохраняет всеатрибуты видео в oembed) не добавляются в мою базу данных.Я пытаюсь сохранить этот динамически сгенерированный заголовок в моей базе данных.

Как мне достичь обеих этих целей?

ОБНОВЛЕНИЕ: Если вам интересно, и вы хотите увидеть это в действии,форк код здесь: https://github.com/meltzerj/Dreamstill

ОБНОВЛЕНИЕ 2: Вот что говорит консоль.Обратите внимание, что один для create, а другой для show:

Запущен POST "/ videos" для 127.0.0.1 в среду 16 марта 03:03:12 -0700 2011 Обработка в VideosController # createв качестве параметров: {"title" => "Исключительно: Чарли Шин говорит, что он" не биполярный, а "двукратный" (02.28.11) "} AREL (0,4 мс) INSERT INTO" videos "(" description "," thumbnail_url ", "release", "video_url", "user_id", "title", "embed_code", "creation_at", "updated_at") ЗНАЧЕНИЯ (NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2011-03-16 10: 03: 12.277518 ',' 2011-03-16 10: 03: 12.277518 ') Перенаправлено на http://localhost:3000/videos/413 Завершено 302 Найдено за 17 мс

Запущено GET "/ videos / 396" для 127,0.0.1 в ср 16 марта 03:03:03 -0700 2011 Обработка с помощью VideosController # show as Parameters: {"id" => "396"} Загрузка видео (0,2 мс) ВЫБРАТЬ "videos". * ИЗ "videos" WHERE "videos "." id "= 396 LIMIT 1 Рендеринг видео / _show_video.html.erb (6,4 мс) Рендеринг видео / show.html.erb в макетах / приложении (9,8 мс) Выполнено 200 ОК за 33 мс (Просмотров: 24,5 мс | ActiveRecorд: 0,2 мс)

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Я раздвоил твой код и запустил его. Я не сталкивался с проблемой маршрутов, которую вы описали, но я использую Rails 3.0.0. Я не знаю, имеет ли это значение или нет.

В любом случае, ваш application.js файл работает точно так, как он закодирован. В основном, что происходит:

На странице указателя каждая ссылка на видео имеет вид <a href="some_video" class="oembed">some text</a>

Javascript в application.js пытается преобразовать все oembed классифицированные ссылки во встроенные видео. При этом, как только он преуспевает, он запускает AJAX POST, что на самом деле не то, что вы хотите.

Я бы порекомендовал:

  • В вашем окне добавления #dialog (модальная частичная часть, я считаю) измените форму на удаленную форму.
  • Напишите представление javascript create.js.erb и включите в него JS, использующий API Embedly для получения заголовка видео на основе URL-адреса. Используемый в настоящее время метод - привязка метода embedly-oembed, вероятно, не лучший способ сделать это. API, вероятно, имеет особый способ получения заголовка без преобразования гиперссылки в код для вставки.
  • Удалите вызов AJAX из привязки события application.js embedly-oembed, так как вы не хотите создавать что-либо каждый раз, когда он преобразует ссылку для встраивания.
  • Если в API нет такого метода, вы, вероятно, могли бы сделать что-то вроде: Отправить видео -> Использовать create.js.erb, чтобы создать ссылку в модальном фрагменте, а затем использовать существующий метод вместе с вызов AJAX (вызывается только для этого окна), который выполняет ОБНОВЛЕНИЕ через PUT (не СОЗДАНИЕ через POST), чтобы обновить заголовок видео, только что добавленного в базу данных.

Надеюсь, это поможет!

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

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

Что касается данных, они должны быть в форме:

Parameters: {"video"=>{"title"=>"Exclusive: Charlie Sheen Says He's 'Not Bipolar but 'Bi-Winning' (02.28.11)"}}

НЕ

Parameters: {"title"=>"Exclusive: Charlie Sheen Says He's 'Not Bipolar but 'Bi-Winning' (02.28.11)"}

В общем, данные должны выглядеть так:

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