案例
第一步:导入layui+ajax的js文件以及css文件
{#引入layui.css#}
{#引入layui.js#}
第二步:编写表单
action=“” method=“post” button控件必须包含lay-submit=“” lay-filter=""两个公用属性
第三步:编写接口
@csrf_exempt
def add_project(request):
arg = {"status": "ok", "msg": None}
pro_obj = ProjectManage()
try:
if request.is_ajax():
print(request.POST)
pro_name = request.POST['pro_name']
pro_en_name = request.POST['pro_en_name']
pro_remark = request.POST['pro_remark']
msg = pro_obj.func_add_project(pro_name, pro_en_name, pro_remark)
arg['state'] = msg
# return redirect('autotest:project_list')
return JsonResponse(arg)
else:
return render(request,'add_project.html')
except Exception as e:
arg['code'] = "error"
arg['msg'] = e
return JsonResponse(arg)
第四步:编写form表单的js
layui.use(['form', 'layedit', 'laydate'], function () {
var form = layui.form
, layer = layui.layer
, layedit = layui.layedit
, laydate = layui.laydate;
{#alert("test");#}
// 登录过期的时候,跳出ifram框架
if (top.location != self.location) top.location = self.location;
form.render();
form.on('submit(add-project)', function (data) {
data = data.field;
{#alert("test");#}
var pro_name = data["pro_name"];
console.log(pro_name);
var pro_en_name = $("#pro_en_name").val();
var pro_remark = $("#pro_remark").val();
const csrftoken = getCookie('csrftoken');
console.log(data);
if (pro_name == " ") {
layer.msg("产品名称不能为空");
return false;
}
if (pro_en_name == "") {
layer.msg("产品英文名称不能为空");
return false;
}
var request_data = {"pro_name": pro_name, "pro_en_name": pro_en_name, "pro_remark": pro_remark};
$.ajax({
cache: false,
data: request_data,
{#dataType: "json",#}
type: "POST",
{#method: "POST",#}
async: true,
headers: {"X-CSRFTOKEN": csrftoken},
url: "{% url 'autotest:add_project' %}",
{#contentType: "application/json",#}
success: function (arg) {
console.log(arg);
status = arg.status;
console.log(status);
if (arg.status == 'ok') {
layer.msg('保存成功');
window.location.replace('{% url 'autotest:project_list' %}');
} else {
layer.msg("提示信息:", arg.errmsg);
}
},
error: function (arg) {
layui.msg("提示信息:", arg);
}
});
return false;
});
})
问题分析
(1) ajax未执行 由于没有导入jquery.js文件导致的 (2)会同时发送一个post请求和get请求 由于form表单没有设置method=“post” ,以及action不为空 (3)ajax回调函数获取不到响应数据 django编写的接口的返回的数据格式不正确导致
文章链接
发表评论