【发布时间】:2016-04-24 23:11:30
【问题描述】:
我需要使用 AJAX 获取一些 HTML。 只要我使用 jQuery,我的视图就可以正常工作:
view.py
def my_ajax(request):
if request.is_ajax():
my_form = MyForm()
context = {
'form': my_form
}
return render(request, 'myapp/form.html', context)
main.js(jQuery 加载)
$(document).ready(function() {
$('#foo').click(function() {
$('#bar').load('{% url "myapp:form" %}');
});
});
如果我使用 JavaScript XMLHttpRequest 我必须从视图中删除 if request.is_ajax(): 否则我会收到错误 The view myapp.views.my_ajax didn't return an HttpResponse object. It returned None instead.
main.js (XMLHttpRequest)
(function() {
document.getElementById('foo').addEventListener("click", function() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
document.getElementById("bar").innerHTML = xhttp.responseText;
}
};
xhttp.open("GET", '{% url "myapp:form" %}', true);
xhttp.send();
}, false);
})();
我在 XMLHttpRequest 中做错了什么? 我肯定错过了一些东西,但这次我想使用 Vanilla JavaScript。 谢谢!
【问题讨论】:
-
您是否通过模板生成器运行
main.js?如果不是,那么它将始终使用 JavaScript 文件中的实际文字'{% url "myapp:form" %}'发送。唯一将被扩展的模板标签必须在您正在呈现的 form.html 模板中。