Javascript AJAX表单,通过JSON响应进行php验证

Javascript AJAX表单,通过JSON响应进行php验证,javascript,ajax,json,Javascript,Ajax,Json,我有一个表单,其中包含通过PHP检查的必填字段。它以JSON格式生成响应,并通过ajax响应交付,格式如下 对象{名字:true,电子邮件:false,电话号码:true,消息:true} 表单中的输入字段的ID等于对象数组的键 我试图实现的是循环遍历这个对象数组,确定缺少哪些字段,并在这里添加错误消息,这就是我的操作方式 if (fields_list) { console.log(fields_list);

我有一个表单,其中包含通过PHP检查的必填字段。它以JSON格式生成响应,并通过ajax响应交付,格式如下 对象{名字:true,电子邮件:false,电话号码:true,消息:true}

表单中的输入字段的ID等于对象数组的键

我试图实现的是循环遍历这个对象数组,确定缺少哪些字段,并在这里添加错误消息,这就是我的操作方式

                if (fields_list) {
                console.log(fields_list);
                for (var key in fields_list) {
                    var item = fields_list[key];
                    if (item === true) {
                        $('#' + key).after('<div class=' + key + '>' + data.field_msg + '</div>');
                    } else {
                        $("div" + '#' + key).remove();
                    };
                }; // Loop through fields_list
            }; // if field list exist
if(字段列表){
控制台日志(字段列表);
for(字段中的var键\u列表){
变量项=字段\列表[键];
如果(项===真){
$('#'+键)。在(''+data.field_msg+'')之后;
}否则{
$(“div“+”#“+键).remove();
};
};//在字段列表中循环
}; // 如果字段列表存在
当执行第一次表单提交时,它会给我预期的结果,它会在输入字段本身之后添加带有错误消息和输入字段id的div容器。问题发生在第二次提交之后。如果数据已输入该字段,我希望删除输入字段之后的div容器。相反,它会在仍然没有数据提交的字段之后继续追加div容器,但不会向有数据的字段追加额外的div容器。如何解决这个问题


先谢谢你

您是否考虑过在表单的顶部/底部有一个errors div?这就是我们在这里用于项目的内容。如果您对尝试它感兴趣,您不必每次都附加一个div,而是有一个带有类“errors”的div,或者已经存在,但用CSS隐藏的东西。当您得到一个响应时,在JSON中添加一个标志“errors”,这样您就知道是否有错误,并在有错误时显示该div。然后,您可以在该div中添加一个简单的错误列表,其中包含ul和li的错误,并在每次提交时清除该列表,以便在第二次需要时在其中生成一个新列表

消息div没有id。因此,您的第二个选择器不匹配

如果您想接近现有代码,最简单的解决方案是也给这些div一个id。例如:

for (var key in fields_list) {
   $('#message' + key).remove(); //clear old messages
   var item = fields_list[key];
   if (item === true) {
       // add message div with unique id
       $('#' + key).after('<div class=' + key + ' id="message' + key + '">' + data.field_msg + '</div>');
    }
}; // Loop through fields_list
for(字段列表中的变量键){
$('#message'+key).remove();//清除旧邮件
变量项=字段\列表[键];
如果(项===真){
//添加具有唯一id的消息div
$('#'+键)。在(''+data.field_msg+'')之后;
}
}; // 循环浏览列表中的字段
if(字段列表){
for(字段中的var键\u列表){
变量项=字段\列表[键];
$(“div“+”#“+键)。remove();//清除旧邮件
如果(项===真){
$('#'+键)。在(''+data.field_msg+'')之后;
}否则{
$(“div“+”#“+键).remove();
};
};//在字段列表中循环
}; // 如果字段列表存在

也许你真的帮了大忙

我想创建一个指向每个字段的指针,该字段是必需的,但不是必需的。我现在知道如何通过切换类来使用一个字段。但这并不是我想要实现的,那就是给你的错误字段一个特定的ID,你可以在创建一个新的ID之前检查它是否存在。例如,与字段键对应的内容。始终检查是否存在,如果存在,则更新它,而不是添加一个新的。如何检查它的存在?可以简单得像($(“#error-”+name)。length==0){//它不存在。}。我错误地将class=而不是id“$('#'+key)。放在(''+data.field#msg+'')之后正如我请求删除id为而不是类的div一样。现在,它会删除不需要的消息,但如果数据仍然丢失,则会在每次提交时在输入上添加错误数据。我需要将其追加一次,而不是多次,以便只创建一个新的div标记,而不是在每次提交时反复添加它们。如果在追加新的错误div之前删除所有错误div,则每个字段只应显示一个。如我的代码示例所示,我建议将.remove()调用从else中去掉,并对所有字段执行它
if (fields_list) {
    for (var key in fields_list) {
        var item = fields_list[key];
        $("div" + '#' + key).remove(); // clear old messages
        if (item === true) {
            $('#' + key).after('<div id=' + key + '>' + data.field_msg + '</div>');
        } else {
            $("div" + '#' + key).remove();
        };
    }; // Loop through fields_list
}; // if field list exist