2011-09-07 18 views
6

利用可能なユーザー名のリモートチェックを含む、作業フォームの検証に使用されていたものがあります。私たちはscript.jsファイルに他の多くのjavascriptを追加しましたが、最近ではこの部分の遠隔地が壊れています。 validateによってチェックされるフォームフィールドは、new_nameフィールドのみです。それは必須であり(動作している)、使用可能でなければならない(動作しない)必要があります。ここでJquery Validate Remoteが失敗しています。フォームを送信できません

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

私は変更なしで、動作するように使用され、上記の言ったように。私はscript.jsファイルの残りの部分をチェックし、エラーは表示されません。また、サイトではJSエラーはどこにも表示されません。上記のコードの遠隔部分を削除すると、必要なチェックが機能し、フィールドに値があるときにフォームが送信されます。

リモートでは、フォームは送信されず、リモート呼び出しからのajax応答がtrueまたはfalseであるかどうかを示すjQuery検証エラーメッセージは表示されません。ここでは、リモートから呼ばれるページです。私はここから行くのはどこ本当にわからない

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

} 

>

:?それは与えられた値のために与えている応答限り正常に動作します。アイデア?

+1

問題をデバッグするために 'console.log'を使用したか、ajax呼び出しを監視しましたか? – yoda

+0

私はFirebugを見ており、ajaxコールは200 OKをtrueまたはfalseと共に適切に返しています。この関数は正常に動作しています。フォームは使用できないユーザー名を正しく送信または応答しません。 –

答えて

2

私はJQ 1.5.1を使用していましたが、ちょうど1.6.3に更新されました。フォームは正常に動作しています。おそらくリモートと1.5.1の問題があったと思いますか?みんなありがとう。

0

リモートオプションでデータを送信しません。

これを試してください。それはあなたに役立つことがあります。

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

}); 

リモートでjsonを使用しないでください。 trueまたは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

ありがとうございます。私はこのリモート呼び出しにデータパラメータを追加する必要はありませんでした。リモートから呼び出されたページをテストすると、#new_nameフィールド値が取得されていることが示されます。私はそれを試みるためにデータパラメータを追加しましたが、何も変更されませんでした。また、echoを "true"/echo "false"に変更しました(これはもともと私が昨日までどのようにしていたかを示しています)。 –

関連する問題