如何在Django模板中使用Jquery / Ajax正确刷新div

我试过在这里实现解决方案,但我似乎无法让它正常工作。

我有一个使用Django模板中的循环填充的div。 在下面,我有一个输入框,我可以在其中键入一些文本,然后单击提交。 Submit操作应该触发一个Jquery脚本,该脚本从服务器获取一个模型对象。 然后应该将该模型对象赋予div,并且随后应该对div进行“刷新”。 这里的意图是,一旦div被’刷新’,for循环访问的变量就会被更新,从而显示额外的新结果。

我的模板代码:

This is a Test Ajax Page

{% for comment in question.comment_set.all %}

{{ comment.body }}

{% endfor %}

我的Jquery:

  $(document).ready(function() { $("button.add-comment-button").click(function() { var com_body = $('#my-text-input-id').val(); $.ajax({ url: '/test_login_url', success: function(data) { $('#refresh-this-div').html(data); } }); }); });  

我的看法:

 def test_login_url(request): question = Question.objects.get(id=1) com = Comment(question=question, body='This is a new Comment!') question.comment_set.add(com) return render_to_response('application/ajax_test_template.html', { 'question': question }) 

单击“提交”按钮时,将刷新div,但刷新的div部分现在包含h1标记的副本。 当我多次单击“提交”时,会填充其他h1标记和注释。

以下是点击之前页面的示例: before_clicking_submit

以下是点击提交后的示例: after_clicking_submit

我已经仔细检查过我的实现与我前面提到的解决方案尽可能相同,但是,我觉得我可能在这里遗漏了一些简单的东西。 使用新的更新变量刷新div的正确方法是什么?

从您通过ajax调用的test_login_url视图返回的HTML包含模板中的h1元素。 在你的ajax成功回调中,你将这个包含h1的HTML加载到你的refresh-this-div div中,但你不是要删除位于容器外的旧h1元素。 使用浏览器上的开发人员工具快速检查DOM应该说明正在发生的事情。

最简单的修复方法可能是将当前模板的内容包装在容器中。

模板代码:

 

This is a Test Ajax Page

{% for comment in question.comment_set.all %}

{{ comment.body }}

{% endfor %}

jQuery的:

 $(document).ready(function() { $("button.add-comment-button").click(function() { var com_body = $('#my-text-input-id').val(); $.ajax({ url: '/test_login_url', success: function(data) { // grab the inner html of the returned div // so you don't nest a new div#refresh-this-div on every call var html = $(data).filter('#refresh-this-div').html(); $('#refresh-this-div').html(html); } }); }); });