Javascript i';我尝试django+;ajax加载html,但它们确实加载了';行不通

Javascript i';我尝试django+;ajax加载html,但它们确实加载了';行不通,javascript,django,Javascript,Django,目前还没有找到解决办法。 实际上我想通过ajax本地加载页面,我不需要全部加载 django代码 #views.py def test(request): if request.POST: a = request.POST['a'] b = request.POST['b'] data = a + b return HttpResponse(data) return render(request, 'test.htm

目前还没有找到解决办法。 实际上我想通过ajax本地加载页面,我不需要全部加载

django代码

#views.py
def test(request):
    if request.POST:
        a = request.POST['a']
        b = request.POST['b']
        data = a + b
        return HttpResponse(data)
    return render(request, 'test.html')
html代码

<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
{% load static %}
<script src="{% static 'js/csrf.js' %}"></script>
<form method="POST">
    {% csrf_token %}
    <input type="text" name="a" id="a">
    <input type="text" name="b" id="b">
    <input type="submit" value="提交" id='go'>
</form>
<script>
$(document).ready(function(){
    $("#go").submit(function(){
        var a = $("#a").val()
        var b = $("#b").val()
        $.ajax({
            type: "POST",
            url: 'test',
            data: {a: a, b:b, csrfmiddlewaretoken: '{{ csrf_token }}'},
            success:function(res){
                alert(res);
            },
        });
        return false;
    });
});
</script>

{%load static%}
{%csrf_令牌%}
$(文档).ready(函数(){
$(“#go”).submit(函数(){
变量a=$(“#a”).val()
var b=$(“#b”).val()
$.ajax({
类型:“POST”,
url:'测试',
数据:{a:a,b:b,csrfmiddlewaretoken:{{{csrf_token}}},
成功:功能(res){
警报(res);
},
});
返回false;
});
});
当我运行时,它直接跳转到“请求”,并且不通过ajax发送。没有弹出警报 很抱歉,我没有注意到一些细节,例如“.ajax”更改为“$.ajax”,错误已通过调试修改


您的答案对我很重要

首先您应该调用表单元素上的.submit(),其次是调用异步运行的ajax函数。表单可能在ajax函数得到响应之前提交。因为ajax是异步的,所以它不会停止表单的提交

我建议你应该这样做:

<form method="POST" id="myForm">
  {% csrf_token %}
  <input type="text" name="a" id="a">
  <input type="text" name="b" id="b">
  <input type="button" value="提交" id='go'>
</form>
<script>
$(document).ready(function(){
    $("#go").click(function(){
        var a = $("#a").val()
        var b = $("#b").val()
        $.ajax({
            type: "POST",
            url: 'test',
            data: {"a": a, "b":b, "csrfmiddlewaretoken": '{{ csrf_token }}'},
            dataType:"json"
            success:function(response){
                alert(response.data);
                //if you want to submit form after this then
                $("#myForm").submit();
            },
         });

    });
});

您可能会找到一些答案,建议在ajax函数中使用async:false,但我必须告诉您,这已被弃用,并且已知会导致糟糕的用户体验,因为它会挂起浏览器,直到获取响应并完成ajax。

First,thx用于回答朋友

我做了一些修改,修改了“视图”,并调整了“ajax”。我想我现在将使用“ajax”+“django”的组合来完成更多的功能

views.py html
这是运行工作。

使用而不是HttpsResponsethk,您的答复已使代码运行。但未达到预期我已回答。一定要让我知道如果它解决了你的问题,你的答案就可以了。但是我还没有尝试过async:false。我会稍后再试。如果我的回答帮助你解决了问题,那么你可以接受。未来的观众会发现它很有帮助。关于ajax:false,即使您直接调用表单提交函数,它也会起作用,但您肯定会遇到一个暂停。好吧,我理解ajax:return false,它会阻止表单提交。因此,访问时不必跳转到网页,即可达到部分加载的效果
def test(request):
    if request.POST:
        a = request.POST['a']
        b = request.POST['b']
        data = a + b
        return HttpResponse(json.dumps({"data":data}), content_type="application/json")
    return render(request, 'test.html')
def test(request):
    if request.POST:
        a = request.POST['a']
        b = request.POST['b']
        data = a + b
        #return HttpResponse(json.dumps(data), content_type="application/json")
        return JsonResponse(data, safe=False)
    return render(request, 'test.html')
$(document).ready(function(){
    $("#go").click(function(){
        var a = $("#a").val()
        var b = $("#b").val()
        $.ajax({
            type: "POST",
            url: "{% url 'test' %}",
            data: {"a": a, "b":b, "csrfmiddlewaretoken": '{{ csrf_token }}'},
            dataType:"json",
            success:function(response){
                alert(response);                
            },
         });return false;
        
    });
});