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();
        }

      });
     });
})

红宝石脚本是:

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 回答