programing

Ruby on Rails 원격 확인 중: 실제 콜백

testmans 2023. 8. 8. 20:07
반응형

Ruby on Rails 원격 확인 중: 실제 콜백

그래서 어떻게 설정해야 할지 검색해 봤는데, 결국 이 코드가 나왔습니다.

<script>

$('#reportform')
    .bind("ajax:success", function(data, status, xhr) {
        $('#reportalert').text('Done.');
    });
    .bind("ajax:error", function(xhr, status, error) {

        $('#reportalert').text('Failed.');

    });

</script>


<h2>Review Driver</h2>
<p>Fill out your review of the driver</p>   

<div class="hero-unit form-signin" id="reportformdiv">

    <%= form_for(@report, html: { id: "reportform" }, remote: true, update: 
    { success: "response", failure: "error"} ) do |t| %>
<p id="reportalert"></p>
    <%= t.text_field  :plant_site,    placeholder: "Plant Site" %>

    <%= t.text_field  :route_number,  placeholder: "Route Number" %>

    <%= t.text_field  :driver_name,   placeholder: "Driver name if available" %>

    <%= t.date_select :date_recorded, html: { class: "input-block-level" } %>

    <%= t.text_field  :action,        placeholder: "Action taken" %>

    <%= t.text_area   :report_body,   placeholder: "What you witnessed",
                                     style: "height: 300px;",
                                     class: "input-block-level" %>

    <%= t.submit     "File Report",  class: "btn btn-primary btn-large" %>

    <% end %>

</div>

하지만 작동하지 않습니다. 제가 왜 잘못했는지 전혀 모르겠습니다. 저는 RoR이 처음이고 이 리모컨을 선언할 수 있다는 사실이 마음에 듭니다. 콜백을 설정하는 방법을 알게 되면 바로 사용할 수 있습니다. :) 미리 감사합니다.

Rails의 Wiki에 따르면 아래의 코드가 작동해야 합니다.

<script>
  $(document).ready(function(){
    $('#reportform').on('ajax:success', function(e, data, status, xhr){
      $('#reportalert').text('Done.');
    }).on('ajax:error',function(e, xhr, status, error){
      $('#reportalert').text('Failed.');
    });
  });
</script>

레일즈 3.2.14와 jquery-rails 3.0.4에서도 비슷한 코드가 작동했습니다.

도움이 되길 바랍니다.

Rails 5.1 이후, 응답, 상태 및 xhr은 event.http://https://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#rails-ujs-event-handlers 를 통해 추출되어야 합니다.

다음은 가능한 솔루션 중 하나입니다.

$(document).on('ajax:success', '#reportform', event => {
  const [response, status, xhr] = event.detail;
});

터보링크 호환

<script type="text/javascript">

    $(document).on('ajax:success', 'a[data-remote].watching', function(e, data, status, xhr){

    });

</script>

사용해 보십시오.

Javascript 코드를 입력합니다.document ready:

<script>
$(document).ready(function(){
  $('#reportform')
    .bind("ajax:success", function(data, status, xhr) {
        $('#reportalert').text('Done.');
    });
    .bind("ajax:error", function(xhr, status, error) {

        $('#reportalert').text('Failed.');

    });
})
</script>

jQuery를 사용할 필요가 없습니다.할 수 있는 일:

document.querySelector('#reportform')
    .addEventListener("ajax:success", function(data, status, xhr) {
        document.querySelector('#reportform').text('Done.');
    });
    .addEventListener("ajax:error", function(xhr, status, error) {
        document.querySelector('#reportform').text('Failed.');
    });

언급URL : https://stackoverflow.com/questions/15395105/trying-to-figure-out-ruby-on-rails-remote-true-callbacks

반응형