2017-07-15 36 views
8

Tôi đã tạo một yêu cầu ajax mã đơn giản để kiểm tra tính khả dụng của email trong khung công tác viết mã. nhưng, tôi nhận được mọi lỗi. và không biết cách giải quyết nó. bên dưới là tập lệnh js chân trang của tôi (sau jquery và các tập lệnh ngoài khác).kiểm tra email người dùng mã lỗi ajax

<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_-][email protected][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); 
        } 
       }) 
      } 
     }); 
    }); 

và đây là chức năng điều khiển tài khoản của tôi để kiểm tra email trong 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'))); 
     } 
    } 
} 

và theo hình thức đăng ký tôi có lĩnh vực này cho đầu vào 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> 

nhưng bây giờ mỗi lần tôi thay đổi giá trị của đầu vào. Tôi gặp lỗi trên 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} 

có ai biết cách khắc phục không?

+0

Vui lòng mở bảng điều khiển web của bạn và thêm ảnh chụp màn hình tiêu đề/phản hồi yêu cầu của bạn và JSON nhận được chức năng ajax của bạn được đăng –

+0

Ngoài ra, bạn có thể thêm đầu ra của console.log (lỗi); –

Trả lời

3

Có gì đứng giữa bạn và một debug thành công là phần này:

error: function (error) { 
    $('#loading').hide(); 
    console.log("There is some errors on server : " + error.error); 
} 

Từ jQuery documentation:

error
Type: Function(jqXHR jqXHR, String textStatus, String errorThrown) A function to be called if the request fails. The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror". When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error." As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and cross-domain JSONP requests. This is an Ajax Event.

gì bạn đang đăng nhập với console.log là tham số jqXHR. Điều này sẽ hoạt động:

error: function (jqXHR, errorType, error) { 
    $('#loading').hide(); 
    console.log(errorType + ": " + error); 
} 

Khi bạn nhận được thông báo lỗi thực tế, bạn có thể truy cập thư mục gốc của sự cố.

+0

Điều đó thật nhanh. Làm tốt lắm! –

+0

Cảm ơn! Đầu ra 'function() ....' đã gửi cho tôi đúng hướng ngay lập tức. – MySidesTheyAreGone

+0

cảm ơn bạn @AlexanderHiggins cho câu trả lời của bạn: Tôi đã thay đổi chức năng như bình luận của bạn và tôi nhận được lỗi này. parsererror: Cú phápError: Mã thông báo không mong muốn

2

Tôi đã thực hiện bài tập này trước đây. Đây là kịch bản Ajax mà tôi đã sử dụng. Tôi đã thực hiện một cách tiếp cận khác với bạn để nhận được tính khả dụng của email. Tôi chưa đặt mã điều khiển vì nó có vẻ mỏng hơn bộ điều khiển của bạn.

$(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); 
      } 
     }); 

     } 
    }); 
}); 

Đây là mã điều khiển mà tôi đã sử dụng:

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>'; 
    } 

} 

Tôi đã thêm xác nhận bên trong config.

'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.' 
        ) 
      ) 
) 

ý định trả lời chỉ là cố gắng trợ giúp. Vì vậy, nếu bạn muốn dính vào phương pháp của bạn, nó hoàn toàn là sự lựa chọn của bạn. Cảm ơn

+0

Tôi muốn kiểm tra email được nhập chính xác EX: [email protected] nhưng tôi cho rằng bạn đã kiểm tra độ dài đầu vào. dù sao . Cảm ơn bạn đã trả lời –

+0

Không, bạn hiểu sai tôi đã thực hiện 'email.length> 3' chỉ vì tôi muốn kiểm tra khi nào người dùng thêm thứ gì đó (tôi đã sử dụng' keyup' như vậy) thì tôi gửi nó đến bộ điều khiển và bộ điều khiển bên tôi đã sử dụng CI xác nhận để kiểm tra email là duy nhất hay không. và trong phản ứng ajax tôi sẽ nhận được các thông báo liên quan đến nó. –

1

Tôi rất tiếc, tôi đã thiết lập giải pháp. đó là vì tôi đã sử dụng một Authentication trong constructor của User controller. Tôi đã thay đổi hình thức hành động để điều khiển khác và thực hiện nó. bây giờ tôi nhận được thông báo về tính khả dụng của email nhưng nếu nó được lấy trước khi tôi không nhận được gì. không có gif tải ajax được hiển thị!

Các vấn đề liên quan