Jquery 提交后接收未更新数据的AJAX

Jquery 提交后接收未更新数据的AJAX,jquery,ajax,form-submit,Jquery,Ajax,Form Submit,我有一个表格用于编辑信息,并在提交后更新数据库。我希望我的页面在更改后刷新HTML视图。下面是我的代码: $('#modal').on 'submit', '#form', (e) -> user_id = this.dataset.userid $.ajax type: 'GET' url: '/api/users/' + user_id success: (data, textStatus, jqXHR) -> listTemplat

我有一个表格用于编辑信息,并在提交后更新数据库。我希望我的页面在更改后刷新HTML视图。下面是我的代码:

$('#modal').on 'submit', '#form', (e) ->
  user_id = this.dataset.userid
  $.ajax
    type: 'GET'
    url:  '/api/users/' + user_id
    success: (data, textStatus, jqXHR) ->
      listTemplate = HandlebarsTemplates['lists/list'](data)
      $('#panel').html("")
      $('#panel').append(listTemplate)

但是,我收到的AJAX数据是旧数据。当我刷新页面时,它会呈现新数据,但这违背了AJAX的目的。提交表单后如何刷新页面?

您的控制器是否正确,我指的是本地链接“/api/users/userid”? 您是否仔细检查了控制器的输出?您的重载链接和Ajax URL相同吗? 您的帖子中有语法错误。当您将用户ID传递给控制器时,它应该返回当前数据集。如果您的重载链接和Ajax请求中的目标URL不相同,那么控制器中一定有问题

更新:对于这种情况,您可以在jquery中对html表单使用element serialize()函数。更多信息可在下面找到

现在,您只需要构建一个名为“newrailscontroller”的新railscontroller,用您传递的所有参数处理ajax get请求。并使用ajax请求中的参数更新db,最后调用db JSON应用程序将感兴趣的数据als JSON返回到ajax调用。在ajax中进行成功调用时要小心,json显示将使用json.stringify()或Jquery.parseJSON()进行解析。有关这方面的更多信息,请参阅


因为我几乎用每种语言编程,但不是用ruby。很抱歉,我不能给你一个例子,如何使你的案件railscontroller。祝你好运。

该代码肯定有效。问题是,我没有从表格中获得提交的最新数据。AJAX将返回与响应相同的旧数据。这个链接是针对基于我的数据库的JSON API的。我认为这个问题是由您的调用逻辑引起的。在控制器为提交post请求处理提交post请求之前,将首先调用ajax请求。这就像您首先使用ajax请求请求旧数据集,然后更新数据库中的数据。什么在处理表单数据?您确实需要在问题中添加更多提示,这样我才能提供更好的帮助。表单由rails控制器操作处理。我认为我所需要的就是以一种方式编写代码,即在ajax请求之前运行submit post请求。然而,我不知道如何按这个顺序写。
<!-- remove the action and method attribut, you don't need that any more-->
<form id="ajaxsubmit">
   <input name="changeme" type="text">
   <input type="submit" value="save">
</form>
$('#ajaxsubmit').submit(function(event) {
  // what every this is for
  var user_id = this.dataset.userid
  var additionalparams = $('#ajaxsubmit').serialize();
  // serialize produces: "changeme=xx&foo=xxx"
  $.ajax({
    type: 'GET',
    url:  'myhost/newrailscontroller',
    data:  'user_id=' + user_id +'&' + additionalparams,
    success: function(data, textStatus, jqXHR){
      // do what ever you want here
      listTemplate = HandlebarsTemplates['lists/list'](data);
      $('#panel').html("");
      $('#panel').append(listTemplate);
    }  
  }); 
});