我想在沒有使用Ajax重新加載表單的情況下在字段的出口點擊數據庫。控制器必須對從數據庫獲得的數據進行一些處理並對視圖做出響應。用戶將繼續輸入。Ajax請求不工作rails 4
我錯過了一些東西,只是看不出什麼是錯的。我有一個在Rails 3.2應用程序中工作的同一段代碼,沒有問題。在Rails 3.2中,請求轉到check_matricula
方法,但在Rails 4中,它轉到show
操作。
下面的代碼是不是在我工作的Rails應用4:
的Gemfile
gem 'responders', '~> 2.0'
查看
<div class="field">
<%= f.text_field :matricula, { "data-remote" => true, "data-url" => "/liquidaciones_de_viajes/check_matricula", "data-type" => :json, :size => 10 } %>
<span id="check_matricula"> </span>
</div>
控制器
class LiquidacionesDeViajesController < ApplicationController
respond_to :html, :json
def check_matricula
@matricula = Matricula.find_by_codigo(params[:liquidacion_de_viajes][:matricula])
# ... some process that result in matricula_ok true or false ...
if matricula_ok
respond_with(@matricula.empresa.razon_social)
else
respond_with(nil)
end
end
end
資產/ Java腳本/ check_matricula.js
$(document).ready(function() {
$("#liquidacion_de_viajes_matricula").bind('ajax:success', function(evt, data, status, xhr) {
if (data !== null) {
$('#razon_social').html(data.razon_social);
$('#check_matricula').html('');
} else {
$('#check_matricula').html('Error de matricula');
$('#razon_social').empty();
}
});
$("#liquidacion_de_viajes_matricula").live('ajax:before', function() {
if ($(this).val() == '') {
return false;
}
});
$("#liquidacion_de_viajes_matricula").focus(function() {
$('#check_matricula').empty();
$('#razon_social').empty();
});
});
我在控制檯中看到一個GET是有,但我確實在路由一個POST:
Started GET "/liquidaciones_de_viajes/check_matricula?liquidacion_de_viajes%5Bmatricula%5D=5555" for 127.0.0.1 at 2016-05-30 15:00:50 -0300
Processing by LiquidacionesDeViajesController#show as JSON
Parameters: {"liquidacion_de_viajes"=>{"matricula"=>"5555"}, "id"=>"check_matricula"}
的第一步,我可以建議你在調試檢查的請求和響應。導航到您的表單頁面。如果您使用的是Chrome,請右鍵點擊該頁面並點擊檢查。在彈出的開發者工具中,點擊「網絡」標籤。然後嘗試在你的'f.text_field:matricula'上輸入。然後,您應該注意到這些新請求將顯示在該開發人員工具窗格中。在開發人員工具中單擊該請求,將出現一個新窗格。在該側窗格上,單擊「響應」。然後檢查響應是否正確。如果這沒有幫助,下一步是調試JS或控制器。 –