Javascript 使用jquery验证输入框值过时

Javascript 使用jquery验证输入框值过时,javascript,php,jquery,ajax,jquery-validate,Javascript,Php,Jquery,Ajax,Jquery Validate,我正在使用jQueryV1.9.1和jQueryValidateV1.9。我正在尝试获取用户给定的id,并使用远程方法验证它。我想检查它是否存在于数据库中。但是,我无法让发送到php脚本的json正常工作,因为我使用ajax获得的值已经过时。下面的代码(我删掉了php)构建了字符串“MailingListID:1”,即使我为MailingListID的值输入了12而不是1 JS <script src="//code.jquery.com/jquery-1.9.1.js"></

我正在使用jQueryV1.9.1和jQueryValidateV1.9。我正在尝试获取用户给定的id,并使用远程方法验证它。我想检查它是否存在于数据库中。但是,我无法让发送到php脚本的json正常工作,因为我使用ajax获得的值已经过时。下面的代码(我删掉了php)构建了字符串“MailingListID:1”,即使我为MailingListID的值输入了12而不是1

JS

<script src="//code.jquery.com/jquery-1.9.1.js"></script>
<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js">    </script>
<script>
$(function() {
    $("#createForm").validate({
        rules:
        {
            WebFormURL:
            {
                required: true,
                url: true
            },
            RedirectURL:
            {
                required: true,
                url: true
            },
            DownloadURL:
            {
                required: false,
                url: true
            },
            EmailNotification:
            {
                email: true
            },
            MailingListID:
            {
                "remote":
                {
                    url: 'checkMailingListID.php',
                    type: "POST",
                    //contentType: "application/json; charset=utf-8",  
                    //dataType:"json",
                    data: "MailingListID=" + $('#mlID').attr('value'),
                    dataFilter: function(data) {
                        var json = JSON.parse(data);
                        if(json === null) {
                            return false;
                        }
                        if(json.mlExists == "false") {
                            return "\"" + json.errorMessage + "\"";
                        } else {
                            return success;
                        }
                    }
                }
            }
        },
        messages:
        {
            MailingListID:
            {
                remote: jQuery.validator.format("No Mailing List with ID {0} exists.")
            }
        },
        submitHandler: function(form)
        {
            form.submit();
        }
    });
});
</script>

$(函数(){
$(“#createForm”)。验证({
规则:
{
WebFormURL:
{
要求:正确,
网址:true
},
重定向URL:
{
要求:正确,
网址:true
},
下载网址:
{
必填项:false,
网址:true
},
电子邮件通知:
{
电子邮件:真的
},
MailingListID:
{
“远程”:
{
url:'checkMailingListID.php',
类型:“POST”,
//contentType:“应用程序/json;字符集=utf-8”,
//数据类型:“json”,
数据:“MailingListID=“+$('#mlID').attr('value'),
数据过滤器:函数(数据){
var json=json.parse(数据);
if(json==null){
返回false;
}
if(json.mlExists==“false”){
返回“\”+json.errorMessage+“\”;
}否则{
回归成功;
}
}
}
}
},
信息:
{
MailingListID:
{
remote:jQuery.validator.format(“不存在ID为{0}的邮件列表”)
}
},
submitHandler:函数(表单)
{
表单提交();
}
});
});
HTML

<h1>Web Form Creator</h1><form id="createForm" name="createForm" method="post" action="">
 <table>
 <tr><td colspan="2" align="left"><h2><b>Enter form details</b></h2></td></tr>
 <tr><td><b>Web Form Name: </b></td><td><input type="text" name="WebFormName" id="WebFormName" size="45"/></td></tr>
 <tr><td><b>Web Form URL: </b></td><td><input type="text" value="http://www.SIMUL8.com/" name="WebFormURL" id="WebFormURL" size="45"/></td></tr>
 <tr><td><b>Redirect URL: </b></td><td><input type="text" value="http://www.SIMUL8.com/" name="RedirectURL" id="RedirectURL" size="45"/></td></tr>
 <tr><td><b>Download URL: </b></td><td><input type="text" value="http://www.SIMUL8.com/" name="DownloadURL" id="DownloadURL" size="45"/></td></tr>
 <tr><td><b>Send Notification Email to: </b></td><td><input type="text" name="EmailNotification" id="EmailNotification"  size="45"/></td></tr>

 <tr><td><b>Subscribe to Mailing List: </b></td><td><input type="text" value="1" name="MailingListID" id="mlID" size="45"/></td></tr> 

 <tr><td colspan="2" align="left"><input type="submit" name="submit" id="submit" value="Generate Form" /></td></tr>
 </table>
 </form>
Web表单创建者
输入表单详细信息
Web表单名称:
Web表单URL:
重定向URL:
下载网址:
发送通知电子邮件至:
订阅邮件列表:
我还尝试完全删除值,然后只得到一个空白值:

<tr><td><b>Subscribe to Mailing List: </b></td><td><input type="text" name="MailingListID" id="mlID" size="45"/></td></tr>
订阅邮件列表:
我尝试了其他方法来获取输入框值,如$('#mlID').val()等,但都没有效果。ContentType和dataType也没有区别。我假设jQuery验证库是在html表单由于某种原因而有机会更新之前被调用的。有人能给我一些提示吗?我曾考虑尝试使用两个jquery库的更新版本,但我找不到它们的URL。

你误解了。所描述的“响应”是从服务器端代码返回的。您不能“
返回
”远程
中的任何内容

MailingListID: {
    remote: {
        url: 'checkMailingListID.php',
        type: 'POST',
    }
}
由于服务器端脚本是PHP,因此只需
echo
a
true
false
或表示错误消息的JSON格式字符串即可

“通过jQuery.ajax(XMLHttpRequest)调用服务器端资源并获取与已验证元素的名称及其作为GET参数的值相对应的键/值对。响应作为JSON计算,对于有效元素必须为
true
,对于无效元素,可以为任何
false
undefined
null
,使用默认消息;或string,例如“该名称已被使用,请尝试使用peter123”显示为错误消息


旁注:这正是默认行为。。。因此,您根本不需要
submitHandler
选项

submitHandler: function(form) {
    form.submit();
}

我没有尝试,只是猜测一下——也许你应该为你的输入字段添加一个change()事件监听器。啊,你是对的。非常感谢你的帮助。