我创建了一个简单的代码ajax请求,用于检查codeigniter框架中的电子邮件可用性。但是,我每次都会得到错误。并且不知道如何解决它。 下面是我的页脚js脚本(在jquery和其他外部脚本之后)。
<script>
$(document).ready(function() {
$("#loading").hide();
$("#email").blur(function() {
var email_val = $("#email").val();
var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
if (filter.test(email_val)) {
// show loader
$('#loading').show();
jQuery.ajax({
type: "POST",
url: "<?php echo site_url()?>users/check_email_ajax",
dataType: 'json',
data: {
'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>',
'email': 'email_val'
},
success: function (response) {
if(response){
$('#loading').hide();
console.log(response.message);
$('#msg').html(response.message)
$('#msg').show().delay(10000).fadeOut();
}
},
error: function(error){
$('#loading').hide();
console.log("There is some errors on server : " + error.error);
}
})
}
});
});
这是我的用户控制器功能,用于检查db
中的电子邮件 public function check_email_ajax(){
// allow only Ajax request
if($this->input->is_ajax_request()) {
// grab the email value from the post variable.
$email = $this->input->post('email');
// check in database - table name : users , Field name in the table : email
if(!$this->form_validation->is_unique($email, 'users.email')) {
// set the json object as output
$this->output->set_content_type('application/json')->set_output(json_encode(array('message' => 'The email is already taken, choose another one')));
}else{
$this->output->set_content_type('application/json')->set_output(json_encode(array('message' => 'you can use this email')));
}
}
}
在注册表格中我有这个字段用于电子邮件输入:
<div class="col-sm-5">
<input type="email" id="email" name="email" class="form-control">
<span id="loading"><img src="<?php echo base_url(); ?>ajax-loader.gif" alt="Ajax Indicator" /></span>
<div id="msg"></div>
</div>
但现在每次我改变输入的值。我在console.log上得到错误
There is some errors on server : function (){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this}
有谁知道如何解决它?
答案 0 :(得分:3)
这一部分是你和成功调试之间的关系:
error: function (error) {
$('#loading').hide();
console.log("There is some errors on server : " + error.error);
}
错误
类型:函数(jqXHR jqXHR,String textStatus,String errorThrown) 请求失败时要调用的函数。该函数接收三个参数:jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象,描述发生的错误类型的字符串和可选的异常对象(如果发生)。第二个参数的可能值(除了null)是&#34;超时&#34;,&#34;错误&#34;,&#34;中止&#34;和&#34; parsererror&#34;。发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,例如&#34; Not Found&#34;或&#34;内部服务器错误。&#34;从jQuery 1.5开始,错误设置可以接受一系列函数。每个函数将依次调用。注意:不会为跨域脚本和跨域JSONP请求调用此处理程序。这是一个Ajax事件。
您使用console.log
记录的是jqXHR参数。这应该有效:
error: function (jqXHR, errorType, error) {
$('#loading').hide();
console.log(errorType + ": " + error);
}
一旦收到实际的错误消息,您就可以找到问题的根源。
答案 1 :(得分:2)
之前我已经完成了这个练习。这是我使用的Ajax脚本。 我采取了不同的方法来获取电子邮件。 我没有放置控制器代码,因为它对你的控制器来说似乎更加纤薄。
$(document).ready(function() {
//Your Email on key press
$("#email").keyup(function() {
var email = $(this).val();
if (email.length > 3)
{
$.ajax({
type: 'POST',
url: emailAvailability_url,
data: {
email: email
}, success: function(data) {
// Your Ajax Resonse Here
} error: function (jqXHR, errorType, error) {
$('#loading').hide();
console.log(errorType + ": " + error);
}
});
}
});
});
这是我使用的控制器代码:
public function check_email_availability(){
$data = $this->input->post();
$this->form_validation->set_error_delimiters('<span class="error">', '</div>');
if (($this->form_validation->run('email_verification') == FALSE)){
echo form_error('email');
} else {
unset($_POST);
echo '<span style="color:green;" id="emailIsValid">Available</span>';
}
}
我在配置中添加了验证。
'email_verification' => array(
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required|max_length[50]|valid_email|is_unique[table_name.email]',
'errors' => array(
'required' => 'Email is required.',
'valid_email' => 'Plese Enter Valid Email',
'is_unique' => 'That Email is already taken. Try Again With New Email.'
)
)
)
答案的意图只是尽力帮助。因此,如果您想坚持自己的方法,那么这完全是您的选择。 感谢
答案 2 :(得分:1)
我很抱歉,我已经找到了解决方案。这是因为我在User控制器的构造函数中使用了Authentication。我已将表单操作更改为另一个控制器并完成了。 现在我收到了电子邮件可用性消息,但是如果它在我什么都没有之前拍摄没有ajax-loading gif显示!