0

ajax 呼び出しを介してデータベース レコードのインライン更新を実行したいと考えています。次に、ページをリロードしたときに更新が表示されるように、ページをリロードします。

ajax スクリプトは次のとおりです。

$(document).ready(function() {
$(".update").click(function() {
        var id = $(this).attr('id');
        var newdesignation =  $('#newdesignation'+ id).val();
        var newcompany =  $('#newcompany'+ id).val();
        var newphone = $('#newphone'+ id).val();
        var newemail = $('#newemail'+ id).val();
        var newremarks = $('#newremarks'+ id).val();
        $.ajax({
        type: "GET",
        url: "/update/data",
        data: { 'id' : id, 'designation' : newdesignation, 'company' : newcompany, 'phone' : newphone,  'email' : newemail,  'remarks' : newremarks },
        success: function(){
        window.location.reload();
        }

      });
     });
})

Rubyスクリプトは次のとおりです。

get '/update/data' do
dataset.where(:id => params[:id]).update(:designation => params[:designation], :company => params[:company], :phone => params[:phone], :email => params[:email], :remarks => params[:remarks])
end

更新は正常に実行されますが、(heroku では) ページがリロードされません。ローカル マシンで実行すると、ページがリロードされます。

コンソールに表示されるエラーは次のとおりです。

502 BAD_GATEWAY 183ms   
jquery.min.js (line 5)
no element found

問題は何ですか?

前もって感謝します!

4

1 に答える 1

1

おそらく、Ruby スクリプトが 200 ステータス コードを明示的に返していないため、成功コールバックをトリガーしていないようです。Sinatra では、コントローラーのコードを次のように変更できます。

get '/update/data' do
  status 200
  dataset.where(:id => params[:id]).update(:designation => params[:designation], :company => params[:company], :phone => params[:phone], :email => params[:email], :remarks => params[:remarks])
end

ステータス 200 行に注意してください。

それでもうまくいかない場合は、他の ajax リクエストを中断していないことを確認してください。コールバックを次のように変更します

$( document ).ajaxStop(function() {
  window.location.reload(true)
})

これは、ページをリロードする前に ajax 呼び出しが完了するのを待ちます。

最後に、サーバー経由でページを更新することを検討しましたか?

次を追加できます: redirect to('/bar')更新が完了した後にページを更新するコントローラー アクションの最後に。

幸運を!

于 2013-09-18T03:31:48.810 に答える