Django AJAX 中的 GET 请求

3

我需要使用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时做错了什么?我肯定是漏了什么,但这次我想使用原生JavaScript。谢谢!


你是否通过模板生成器运行main.js? 如果没有,则它将在JavaScript文件中始终发送实际文本'{% url "myapp:form" %}'。唯一会被扩展的模板标签必须位于你正在渲染的form.html模板中。 - 2ps
1个回答

5
尝试在 var xhttp = new XMLHttpRequest(); 后面添加 xhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

谢谢...实际上我必须将它放在xhttp.open("GET", '{% url "myapp:form" %}', true);之后。 - isar
我更新了答案,因为它需要是 XMLHttpRequest 而不是 XmlHttpRequest :) - teewuane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接