jQuery Validate Remote验证在Django URL下失效,adno字段非空时不校验
问题:jQuery Validate远程验证不生效(仅空值提示错误)
问题现象
提交表单时,adno数字字段仅在为空时显示错误边框,输入任意数字后远程验证完全不生效。预期仅当输入1111时验证通过,实际输入非空数字后无任何错误提示。
相关代码
模板HTML代码
<input name="adno" id="id_adno" type="number" class="form-control" placeholder="" required>
jQuery Validate Remote配置
adno: { remote: { url: "{% url 'is_adno_valid' %}", type: "post", data: { field_value: function () { return $("#id_adno").val(); }, csrfmiddlewaretoken: "{{ csrf_token }}" } } },
Django后端代码(views.py)
def is_adno_valid(request): adno = int(request.POST.get('adno')) return JsonResponse({'status':adno==1111})
Django路由配置(urls.py)
path('is_adno_valid',views.is_adno_valid, name='is_adno_valid'),
错误原因
- 参数名不匹配:前端
remote配置传递的参数是field_value,但后端试图获取request.POST.get('adno'),参数名不一致导致后端拿不到值,触发int(None)类型转换错误,返回500状态码。jQuery Validate默认忽略非200状态码的响应,因此不触发错误提示。 - 返回格式不符合要求:jQuery Validate的
remote验证要求后端直接返回true(验证通过)或false/字符串(验证失败,字符串作为错误提示),当前返回的{'status': ...}对象无法被插件识别。
修复步骤
1. 修正前端参数名
将data中的field_value改为adno,与后端参数名保持一致:
adno: { remote: { url: "{% url 'is_adno_valid' %}", type: "post", data: { adno: function () { return $("#id_adno").val(); }, csrfmiddlewaretoken: "{{ csrf_token }}" } } },
2. 修正后端返回格式
直接返回符合插件要求的布尔值或错误提示字符串,同时增加异常处理避免非数字输入报错:
def is_adno_valid(request): try: adno = int(request.POST.get('adno', 0)) # 验证通过返回True,失败返回自定义错误提示 return JsonResponse(True, safe=False) if adno == 1111 else JsonResponse("广告编号必须为1111", safe=False) except ValueError: # 处理非数字输入的情况 return JsonResponse("请输入有效的数字", safe=False)
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

