【问题标题】:Django GET request in AJAXAJAX 中的 Django GET 请求
【发布时间】: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 模板中。

标签: ajax django


【解决方案1】:

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

【讨论】:

  • 谢谢...实际上我必须把它放在xhttp.open("GET", '{% url "myapp:form" %}', true);之后。
  • 我更新了答案,因为它需要是XMLHttpRequest 而不是XmlHttpRequest:)
猜你喜欢
  • 2020-06-17
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 2016-06-18
相关资源
最近更新 更多