urls.py
urlpatterns = [
path('admin/', admin.site.urls),
# ajax 相关
path("ajax_temp/", views.ajax_temp),
path("ajax_sleep/", views.ajax_sleep),
path("ajax_test/", views.ajax_test),
path("ajax_sum/", views.ajax_sum),
# path("ajax_json/", views.ajax_json),
# path("upload/", views.upload),
]
views.py
from django.shortcuts import render, HttpResponse
from app01 import models
def ajax_sleep(request):
import time
time.sleep(3)
return HttpResponse("睡了3s")
def ajax_temp(request):
return render(request, "ajax_temp.html")
def ajax_test(request):
return HttpResponse("test...")
from django.http import JsonResponse
def ajax_sum(request):
if request.is_ajax():
num1 = request.POST.get("num1")
num2 = request.POST.get("num2")
ret = {"status": 1, "msg": None}
try:
total = int(num1) + int(num2)
ret['msg'] = total
except Exception as e:
ret['status'] = 0
ret['msg'] = "请输入数字"
# return HttpResponse(total)
return JsonResponse(ret)
### 视图响应时,只能时HttpResponse或者JsonResponse,render和redirect不能作为ajax请求的返回对象。
ajax_temp.html
<button id="btn1">ajax_sleep</button>
<button id="btn2">ajax_test</button>
{% csrf_token %}
<div>
<input type="text" id="i1"> + <input type="text" id="i2"> =
<input type="text" id="i3"><button id="sum1">计算</button><span id="s1"></span>
</div>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
{#异步案例#}
$("#btn1").click(function () {
$.ajax({
url: "/ajax_sleep/",
type: "get",
success: function (data) {
console.log(data);
}
})
});
$("#btn2").click(function () {
$.ajax({
url: "/ajax_test/",
type: "get",
success: function (data) {
console.log(data);
}
})
});
{#计算案例#}
$("#sum1").click(function () {
var num1 = $("#i1").val();
var num2 = $("#i2").val();
$.ajax({
url: "/ajax_sum/",
type: "post",
data: {
num1: num1,
num2: num2,
csrfmiddlewaretoken: $("[name=csrfmiddlewaretoken]").val(),
},
success: function (data) {
// JSON.parse(data) 反序列化才能使用
if (data.status){
$("#i3").val(data.msg);
}else{
$("#s1").text(data.msg);
setTimeout(function () {
$("#s1").text("");
}, 2000)
}
}
})
});
</script>
浙公网安备 33010602011771号