Javascript i';我尝试django+;ajax加载html,但它们确实加载了';行不通
目前还没有找到解决办法。 实际上我想通过ajax本地加载页面,我不需要全部加载 django代码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
#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;
});
});