2011-09-07 18 views
6

Tôi có hình thức xác minh biểu mẫu đang hoạt động, bao gồm kiểm tra từ xa tên người dùng có sẵn. chúng tôi đã thêm rất nhiều javascript khác vào tệp script.js và tại một số điểm gần đây, phần từ xa này đã bị hỏng. Chỉ có một trường biểu mẫu được kiểm tra bằng cách xác thực, trường new_name. Nó là bắt buộc (công trình) và phải có sẵn (không hoạt động).Jquery Validate Remote không thành công. Không thể gửi biểu mẫu

Đây là jQuery:

 $('#nickname_form').validate({ 
     rules: { 
      new_name: { 
       required: true, 
       remote: { 
        url: '/api/screenname_unique/', 
        type: 'post' 
       } 
      } 
     }, 
     messages: { 
      new_name: { 
       required: 'Please choose a Forum Username.', 
       remote: 'That Username is already taken or contains invalid characters.' 
      } 
     } 
    }); 

Như tôi đã nói ở trên dùng để làm việc, không có thay đổi. Tôi đã kiểm tra phần còn lại của tệp script.js và không có lỗi nào hiển thị. Ngoài ra, trong trang web, chúng tôi không thấy lỗi JS ở bất kỳ đâu. Nếu tôi xóa phần từ xa của mã trên, yêu cầu kiểm tra hoạt động và biểu mẫu sẽ gửi khi có giá trị trong trường.

Với điều khiển từ xa tại chỗ, biểu mẫu sẽ không gửi và phản hồi ajax từ cuộc gọi từ xa là đúng hay sai, không có thông báo lỗi xác thực jQuery được hiển thị. Đây là trang được gọi là từ xa. Nó hoạt động tốt như xa như phản ứng nó được đưa ra cho một giá trị nhất định:

<?php 
header('Content-type: application/json'); 

//get the post value 
$screen_name = $_POST['new_name']; 

//get their member_id 
$member_id = $this->EE->session->userdata['member_id']; 

//return false if no screen_name provided 
if((!$screen_name) || (!$member_id)) { 
    echo json_encode(false); 
    exit; 
} else { //there is a screen_name 

    //Regex Check for valid chars 
    $valid = !preg_match('/[^a-z0-9_ -]/i',trim($screen_name)); 

    if (!$valid) { 
     echo json_encode(false); 
     exit; 
    } 

    //SQL 
    $results = $this->EE->db->query("SELECT member_id FROM exp_members WHERE screen_name = '$screen_name' and member_id <> '$member_id' limit 1"); 

    if ($results->num_rows() > 0) { 
     echo json_encode(false); 
    } else { 
     echo json_encode(true); 
    } 

} 

>

Tôi không thực sự chắc chắn nơi để đi từ đây. Ý tưởng?

+1

Bạn đã sử dụng 'console.log' hoặc đã xem các cuộc gọi ajax để gỡ lỗi sự cố chưa? – yoda

+0

Tôi đã xem với Firebug và các cuộc gọi ajax đang trả lại 200 OK cùng với đúng hoặc sai một cách thích hợp. Chức năng này hoạt động tốt - biểu mẫu sẽ không gửi hoặc trả lời đúng tên người dùng không có sẵn. –

Trả lời

2

Tôi đã sử dụng JQ 1.5.1 và chỉ cập nhật lên 1.6.3 và bây giờ biểu mẫu đang hoạt động tốt. Tôi đoán có lẽ đã xảy ra sự cố với điều khiển từ xa và 1.5.1? Cảm ơn các bạn.

0

Bạn không gửi dữ liệu bằng tùy chọn từ xa.

Hãy thử cái này. Nó có thể hữu ích cho bạn.

$("#nickname_form").validate({ 

rules: { 
Name: "required", 
email: { 
    required: true, 
    email: true 
}, 

username: 
{ 
    required: true, 
    remote: { 
    url: "http://www.xyz.com/checkusername.php", 
    type: "post", 
    data: { 
     username: function() { 
     return $("#username").val(); 
     } 
    } 
    } 
} 
}, 

messages: { 

Name: "Please enter name.", 
email: { 
    required: "Email address require.", 
    email: "Please enter valid email address." 
}, 

username: 
{ 
    required: " Please enter username.", 
    remote: " Username is already exists please choose other." 
} 
    }, 

errorPlacement: function(error, element) { 
       error.appendTo(element.next()); 
      }, 

submitHandler: function() { 
     sendmail(); 
     }, 
success: function(label) { 
     label.html("&nbsp;").addClass("valid_small");     
     } 

}); 

Và ở phía máy chủ không sử dụng json ở tùy chọn từ xa. In đúng hoặc sai.

<?php 
    { 
$screen_name = $_POST['username']; 
$member_id = $this->EE->session->userdata['member_id']; 

    $results = $this->EE->db->query("SELECT member_id FROM exp_members WHERE screen_name = '$screen_name' and member_id <> '$member_id' limit 1"); 
    if(count($dataArray)>0) 
    { 
     echo "false";die; 
    } 
    else 
    { 
     echo "true";die; 
    }  
    } 
    ?> 
+0

Cảm ơn. Tôi chưa bao giờ phải thêm tham số dữ liệu vào cuộc gọi từ xa này. Kiểm tra trang được gọi bằng điều khiển từ xa cho thấy nó đang nhận giá trị trường #new_name. Tôi đã thêm thông số dữ liệu chỉ để thử nó nhưng nó không thay đổi bất cứ điều gì. Cũng thay đổi đầu ra để echo "true"/echo "false" (đó là cách tôi đã có nó ban đầu cho đến ngày hôm qua) và điều đó cũng không thay đổi gì cả. –

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