2012-01-09 4 views
0

Невозможно передать переменную javascript в http get request. Вот блок кода, который принимает значение выбора тега и передает его в запрос в 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, однако, я вижу, что мое значение изменилось в консоли. 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

7 вопросов, 0 принятых ответов ... пожалуйста, вернитесь и примите некоторые предварительные ответы. http://stackoverflow.com/users/533982/dastan-kozhomuratov?tab=questions – iwasrobbed

ответ

0

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

  1. Хватает текущее значение #mktu_class и сохраняет его в mktuClassID.
  2. Становится обработчиком изменений #mktu_class, который сохраняет свое значение в mktuClassID.
  3. Звонки tokenInput с адресом "/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 изменилось.

+0

Я пробовал код, который вы предлагаете. Он делает то, что переменная mktuClassID получает правильное значение, но я получаю еще одну проблему. Проблема заключается в том, что метод tokenInput помещает поле ввода в мою DOM и каждый раз, когда работает обработчик изменений. – dastanko

+0

@Dastan: Я не знаю, что должен делать 'tokenInput'. Вам нужно каждый раз вызывать 'tokenInput', когда' # mktu_class' изменяется или только один раз? –

+0

Только один раз ... – dastanko

Смежные вопросы