2011-09-07 10 views
6

mam co kiedyś walidacja forma pracy, w tym zdalne sprawdzenie nazwy użytkownika jako dostępne. dodaliśmy wiele innych javascript do pliku script.js iw pewnym momencie zdalna część tego się zepsuła. Istnieje tylko jedno pole formularza sprawdzane przez validate, pole new_name. Jest wymagany (działa) i musi być dostępny (nie działa).Jquery Validate Remote nie działa. Nie można Złożenie

Oto 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.' 
      } 
     } 
    }); 

Jak powiedziałem wyżej wykorzystywane do pracy, bez żadnych zmian. Sprawdziłem resztę pliku script.js i nie pojawiają się żadne błędy. Ponadto w witrynie nie zauważamy błędów JS w dowolnym miejscu. Jeśli usunę część zdalną powyższego kodu, wymagany sprawdzian działa i formularz zostanie przesłany, gdy w polu znajdzie się wartość.

ze zdalnym w miejscu, forma nie podda i czy ajax odpowiedź ze zdalnego wywołania jest prawdziwe lub fałszywe, nie ma jQuery sprawdzania pokazany komunikat o błędzie. Oto strona wywoływana przez zdalny. To działa dobrze, jeśli chodzi o odpowiedzi to daje dla danej wartości:

<?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); 
    } 

} 

>

Nie jestem pewien gdzie iść stąd. Pomysły?

+1

Czy korzystal 'console.log' lub obserwował ajax wzywa do debugowania problem? – yoda

+0

Oglądałem z Firebug, a wywołania ajax zwróciły 200 OK wraz z prawdą lub fałszem odpowiednio. Funkcja działa poprawnie - formularz po prostu nie zostanie przesłany poprawnie lub nie odpowie na niedostępną nazwę użytkownika. –

Odpowiedz

2

Używałem JQ 1.5.1 i właśnie zaktualizowałem do wersji 1.6.3, a teraz formularz działa poprawnie. Chyba był problem z pilotem i 1.5.1? Dzięki chłopaki.

0

Ty nie wysłał danych z opcją zdalnego.

Spróbuj tego. To może być pomocne dla ciebie.

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

}); 

A po stronie serwera nie używaj json w opcji zdalnej. Drukuj true lub false.

<?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

Dzięki. Nigdy nie musiałem dodawać parametru danych do tego zdalnego połączenia. Testowanie strony wywołanej za pomocą zdalnego pokazuje, że pobiera ona wartość #nazw_name. Dodałem parametr danych tylko po to, aby spróbować, ale nic nie zmieniło. Zmieniłem również wyjście na echo "true"/echo "false" (tak miałem pierwotnie do wczoraj) i to też niczego nie zmieniło. –