You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'),

错误原因

  1. 参数名不匹配:前端remote配置传递的参数是field_value,但后端试图获取request.POST.get('adno'),参数名不一致导致后端拿不到值,触发int(None)类型转换错误,返回500状态码。jQuery Validate默认忽略非200状态码的响应,因此不触发错误提示。
  2. 返回格式不符合要求: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 17:17:17