Попадание в параметры неправильного номера - PullRequest
0 голосов
/ 10 января 2012

Невозможно передать переменную javascript в запрос http get. Вот блок кода, который принимает значение тега select и передает его в запрос в coffeescript:

jQuery(document).ready ->
    mktuClassID = $("#mktu_class").val();

    $("#mktu_class").change getClassID = ->
        mktuClassID = $(this).val()

    $("#registration_application_items").tokenInput("/items/" + mktuClassID, {
        crossDomain: false,
        prePopulate: $("#registration_application_items").data("pre"),
        preventDuplicates: true,
        theme: "facebook"
    })

оно всегда отправляет одно и то же значение в переменную mktuClassID, однако я вижу, что мое значение изменилось в console.log (), но оно всегда передает одно и то же значение в методе tokenInput. Вот журнал:

Processing by MktuItemsController#token_inputs as JSON
Parameters: {"q"=>"2", "class_id"=>"3"}
MktuItem Load (0.7ms)  SELECT "mktu_items".* FROM "mktu_items" WHERE (name like '%2%' AND mktu_class_id = '3')

Пожалуйста, помогите мне, как мне изменить порядок моего кода, чтобы он работал?

1 Ответ

0 голосов
/ 10 января 2012

Ваш обработчик ready делает три вещи:

  1. Получает текущее значение #mktu_class и сохраняет его в mktuClassID.
  2. Связывает обработчик изменений с #mktu_class, который сохраняет его значение в mktuClassID.
  3. Вызывает tokenInput с URL-адресом "/items/" + mktuClassID, где mktuClassID - это значение из (1).

В результате ваш обработчик изменений на #mktu_class не делает ничего полезного, и любые изменения в #mktu_class будут игнорироваться (ну, в конечном итоге они будут mktuClassID, но ничего не будет смотреть на mktuClassID так что эффект тот же). Возможно, ваш отступ отключен, и вы действительно хотите, чтобы вызов /items был внутри обработчика изменений:

jQuery(document).ready ->
    mktuClassID = $("#mktu_class").val();

    $("#mktu_class").change getClassID = ->
        mktuClassID = $(this).val()
        $("#registration_application_items").tokenInput("/items/" + mktuClassID, {
            crossDomain: false,
            prePopulate: $("#registration_application_items").data("pre"),
            preventDuplicates: true,
            theme: "facebook"
        })

Если это так, то полностью покончи с mktuClassID и добавьте $('#mktu_class').change() вызов для инициализации:

jQuery(document).ready ->
    $('#mktu_class').change ->
        mktuClassID = $(this).val()
        $('#registration_application_items').tokenInput('/items/' + encodeURIComponent(mktuClassID), {
            crossDomain: false,
            prePopulate: $('#registration_application_items').data('pre'),
            preventDuplicates: true,
            theme: 'facebook'
        })
    $('#mktu_class').change();

И вы действительно должны быть параноиком и кодировать mktuClassID, когда вводите его в URL, поэтому я добавил также вызов encodeURIComponent.

Если вы хотите вызывать tokenInput только в первый раз, когда #mktu_class изменится, тогда свяжите обработчик изменений с помощью one:

jQuery(document).ready ->
    $('#mktu_class').one 'change', ->
        mktuClassID = $(this).val()
        $('#registration_application_items').tokenInput('/items/' + encodeURIComponent(mktuClassID), {
            crossDomain: false,
            prePopulate: $('#registration_application_items').data('pre'),
            preventDuplicates: true,
            theme: 'facebook'
        })

Эта версия будет вызывать tokenInput только при первом изменении #mktu_class.

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