我正在使用jQuery模式为我的laravel项目创建和更新用户。在创建新用户时我检查用户名的可用性。但是该功能不支持更新,当用户在不更改用户名的情况下保存数据时,它会给出usernam availble错误。请告知如何修复
我的控制器,
public function checkUsernameAvailability()
{
$user = DB::table('users')->where('username', Input::get('username'))->count();
if ($user > 0) {
$isAvailable = FALSE;
} else {
$isAvailable = TRUE;
}
echo json_encode(
array(
'valid' => $isAvailable
));
}
jQuery modal
username: {
validators: {
notEmpty: {
message: 'The Username field is required'
},
rules : {
username : { alphanumeric : true }
},
remote: {
url: "{{ URL::to('/checkUsername') }}",
data: function (validator) {
return {
username: validator.getFieldElements('username').val()
}
},
message: 'The Username is not available'
},
stringLength: {
max: 100,
message: 'The Username must be less than 100 characters long'
}
}
},
答案 0 :(得分:0)
1 - 您可以在ajax中发送一些参数,如果它是更新或新的。并且只有当它是新用户时,您才可以在服务器端检查它是否基于参数值调用checkUsernameAvailability()。在更新的情况下,您不需要调用该方法。
2-如果是用于检查用户可用性的更新,请不要调用ajax。
答案 1 :(得分:0)
我认为你应该在提交表单,用户.on('blur')的jQuery之前检查表中是否已存在用户名,并调用函数checkusernameAvailability(),然后在此基础上捕获响应更改功能要么创建用户,要么更新用户。希望这会对你有所帮助。
答案 2 :(得分:0)
试试这段代码:
要添加的新代码
$(document).ready(function(){
$('#username').data('actval',$('#username').val());
});
您的代码中的更改Javascript
username: {
validators: {
notEmpty: {
message: 'The Username field is required'
},
rules : {
username : { alphanumeric : true }
},
remote: {
url: "{{ URL::to('/checkUsername') }}",
data: function (validator) {
return {
username: validator.getFieldElements('username').val(),
----------------------- actusername: $('#username').data('actval')
}
},
message: 'The Username is not available'
},
stringLength: {
max: 100,
message: 'The Username must be less than 100 characters long'
}
}
},
PHP代码更改
public function checkUsernameAvailability()
{
$user = 0;
if(Input::get('username') != Input::get('actusername')){
$user = DB::table('users')->where('username', Input::get('username'))->count();
}
if ($user > 0) {
$isAvailable = FALSE;
} else {
$isAvailable = TRUE;
}
echo json_encode(
array(
'valid' => $isAvailable
));
}