php - 在 jQuery 上使用多个远程 ajax
问题描述
我想使用 jQuery 对电子邮件进行验证
使用 Ajax 进行常规验证(必需)和其他验证
第一个验证电子邮件是否存在以及其他要验证的功能不在黑名单中(其他表)
$('#form').validate({
errorElement: 'span',
rules:{
Email: {
required: true,
email: true,
remote: '/ifexist'
}
},
messages:{
Email:{
remote:'email already exist'
}
}
});
我尝试像这样添加其他遥控器,但它不起作用
remote: '/ifexist'
remote: '/inblacklist'
我的php代码
if(isset($_GET['Email'])){
$is_valid = Member::inblacklist($email);
header('Content-Type: application/json');
echo json_encode($is_valid);
}else{}
有什么解决办法吗?
解决方案
这个问题 的答案声称jQuery 验证插件不支持多个遥控器(我还没有看到任何可靠的证据来证明这一说法或其他方面)。如果我要处理你的案子,我会做如下的事情。
$('#form').validate({
errorElement: 'span',
rules:{
Email: {
required: true,
email: true,
remote: {
url:'/ifexist',
type:'POST', //Or whatever
data:function(){
return $("#email").val(); // The value of the email field
},
dataType:"JSON", // So that you can return a JSON object from the backend
dataFilter:function(responseData){ // Handles the response
/* Assume you return a JSON object as follows
* {"isValid":false, "reason":"blacklisted"}
* or may be
* {"isValid":false, "reason":"duplicate"}
*/
alert(responseData.reason); // Or whatever
return responseData.isValid; // validation result
}
}
}
},
// Rest of the validation logic
这里发生的情况是,您可以控制来自后端验证例程的响应并根据需要处理它。
该插件几乎是完全可定制的。有关更多详细信息,请参阅文档。
编辑(更新原始问题后)
php 中的后端可能如下所示。
if(isset($_POST['Email'])){
$email = $_POST['Email'];
$response = null;
$isInBlackList = Member::inblacklist($email);
if($isBlackList){
// User is in the blacklist
$response = array("isValid"=>false, "message"=>"This email is blacklisted!"); // Initialize $response
}
else{
$alreadyExists = Member::alreadyExists($email); // You have to implement this.
if($alreadyExists){
// Email already exists
$response = array("isValid"=>false, "message"=>"This email is already in user"); // Initialize $response
}
else{
// We found a valid email
$response = array("isValid"=>true);
}
}
header('Content-Type: application/json');
echo json_encode($response);
}else{}
请注意使用 phparray()
封装响应并将其返回为 JSON。
推荐阅读
- django - Django提取字段表单html
- android-intent - 我的 startActivityForResult 要求 3 个强制参数
- java - 过滤字符串中不断变化的数字的最简单方法是什么?
- python - QtableWidget 到 DataFrame
- java - 在 antlr4 中跳过代码块
- css - 如何使填充响应
- c# - 连接到 MQ 队列管理器时的 MQRC_HOST_NOT_AVAILABLE
- spring-boot - Spring Cloud Stream Kafka 通道在 Spring Boot 应用程序中不起作用
- multithreading - 访问自己的线程信息(delphi)
- forms - 有没有办法使用 cakephp3 在页面中调用无模式表单