2016-12-05 5 views
0

Я пытаюсь настроить выбранный ввод, который заполняет div данными, вытащенными при вызове ajax при изменении ввода выбора.Rails JQuery вызов Ajax преуспевает, но данные js.erb не отображаются, если я не включаю нежелательные символы.

Я проверил в журналах, что успешный вызов ajax и файл js.erb визуализируется, однако, действительно ли содержимое js.erb-файла фактически отображается в целевом div, похоже, зависит от того, включаю ли я некоторые символы в файле js.erb. Я не могу окутать голову, почему это может быть, и я не могу получить конкретные данные, которые я хочу отображать, не включая также нежелательных символов.

Вид:

 <div id="gl"></div> 
     <div class="form-group"> 
     <%= f.label :fc %> 
     <div class="input-group"> 
      <%= f.collection_select :fc, Location.active, :location_name, :location_name, {prompt: true}, {required: true, class: 'form-control input-sm'} %> 
     </div> 
     </div> 

Просмотр сценария:

$(document).ready(function() {  
     $("#idle_asset_fc").change(function() { 
      $.ajax({ 
       url: "<%= get_gl_prefix_ajax_path %>", 
       data: "fc=" + $("#idle_asset_fc").val(), 
       success: function(data){ 
        $("#gl").html(data); 
       } 
      }); 

     }); 

Контроллер:

def get_gl_prefix_ajax 
    @result = Location.location_name(params[:fc]).pluck(:gl_prefix)[0] 
    respond_to do |format| 
     format.js 
    end 
end 

Примеры get_gl_prefix_ajax.js.erb, которые успешно изменяют div:

Добавление двойных или одинарных кавычек вокруг моих меток erb позволяет добавлять его в div, а добавление двойной косой черты также позволяет добавлять данные, однако котировки и слеши также показать, что не требуется

'<%= @result %>' <!-- results in '01.1234', including the quotes --> 
//<%= @result %> <!-- results in //01.1234, including the forward slashes --> 

Это то, что я хочу, но он не добавляется к DIV без вышеуказанных символов:

<%= @result %> <!-- should result in 01.2345 --> 

Можно также упомянуть, что обычный текст не будет добавлен без кавычек или косой черты. Кроме того, добавление чего-либо за пределами кавычек или не непосредственно за двойными косыми чертами приведет к тому, что в div не будет добавлено ничего.

Я пробовал обернуть свой код в escape_javascript, но, похоже, это не изменило ситуацию.

Представитель запись журнала:

Mon Dec 05 19:16:48 2016 GMT 26728....com:0 [INFO] (null):0 (null)(): (null): Started GET "/get_gl_prefix_ajax?fc=ILA11" for 1...9 at 2016-12-05 19:16:48 +0000 
Mon Dec 05 19:16:48 2016 GMT 26728....com:0 [INFO] (null):0 (null)(): (null): Processing by LocationsController#get_gl_prefix_ajax as */* 
Mon Dec 05 19:16:48 2016 GMT 26728....com:0 [INFO] (null):0 (null)(): (null): Parameters: {"fc"=>"ILA11"} 
Mon Dec 05 19:16:48 2016 GMT 26728....com:0 [DEBUG] (null):0 (null)(): (null): (12.3ms) SELECT `locations`.`gl_prefix` FROM `locations` WHERE (location_name = 'ILA11') 
Mon Dec 05 19:16:48 2016 GMT 26728....com:0 [INFO] (null):0 (null)(): (null): Rendered locations/get_gl_prefix_ajax.js.erb (0.4ms) 
Mon Dec 05 19:16:48 2016 GMT 26728....com:0 [INFO] (null):0 (null)(): (null): Completed 200 OK in 126ms (Views: 2.2ms | ActiveRecord: 12.3ms) 

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

ответ

0

В контроллере, когда вы делаете это:

Это означает, что вы возвращаете Javascript в ответе, а не HTML напрямую. Следовательно, когда вы завертываете его в кавычки или начинаете с //, он интерпретирует его как строку Javascript или строку комментария.

Есть два способа исправить это.

  1. RJS Путь

    Снимите следующие success блок из кода JQuery:

    success: function(data){ 
        $("#gl").html(data); 
    } 
    

    Добавить Javascript в get_gl_prefix_ajax.js.erb файле, который является то, что его предназначен. Это будет выглядеть следующим образом:

    $("#gl").html('<%= result %>'); 
    
  2. В JSON Путь

    Другой вариант вернуть ваши данные в формате JSON из контроллера, а затем в success обратного вызова для $.ajax, анализировать данные в формате JSON и преобразовать его в HTML, прежде чем вставлять в DOM.

+0

Спасибо, RJS Way работал отлично. –

0

Не уверен, что это самый чистый способ купить вы можете использовать функцию parseFloat() на строку Js, чтобы преобразовать его из строки поплавком

+0

Спасибо, но его странность в том, почему он не отображает мои данные без дополнительных символов, о которых я беспокоюсь, а не о типе данных. Я просто показываю его на странице, поэтому прекрасно, что это строка. –

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

  • Нет связанных вопросов^_^