0

常に true として解決される応答の解決に問題があります。パスワードを忘れた場合のフォームを送信していますが、そこには電子メールのフィールドが 1 つしかありません。電子メールに基づいてデータベースでレコードをチェックインし、レコードが返された場合は json を true に設定し、そうでない場合は false に設定します。これが私の Codeigniter コントローラーのコードです。

 public function checkEmail()
    {     
        // set the validation rules
        $this->form_validation->set_rules('checkemail', 'E-Mail', 'valid_email');
        $this->form_validation->set_error_delimiters('<br /><p class=jsdiserr>', '</p><br />');
        // if validation is passed
        if ($this->form_validation->run() != FALSE) 
        {
            $ids=array();
            $ids[0]=$this->db->where('email', $this->input->post('checkemail'));

            $query = $this->backOfficeUsersModel->get();

            if($query)
            {
                $data = array(
                    'userid'       => $query[0]['userid'],
                    'username'       => $query[0]['username'],
                    'password'       => $query[0]['password'],
                    'firstname'       => $query[0]['firstname'],
                    'lastname'       => $query[0]['lastname'],
                    'email'       => $query[0]['email']


                );           
                $currentUser = array();
                $currentUser = $this->session->set_userdata($data);


                echo json_encode(array("success" => "true"));
        } else {   

                echo json_encode(array("success" => "false"));
        }
        //  form validation has failed 
        } else {     
            $errorMessage = "Wrong email!";
        }
    }   // end of function checkEmail 

ここで、JavaScript ファイルで結果を確認すると、常に true になります。コードは次のとおりです。

       $("#formSendPassword").submit(function(e){     
       e.preventDefault();

        var email = $(this).find("#checkemail").val();   
        var obj = {email: email};
        var url = $(this).attr("action");
        $.post(url, obj, function(r){
            if(r.success == "true") {
              console.log(r.success);
              $('#forgotPasswordForm').hide();
              $('#successMailMessage').fadeIn()
            } else {
              $('#forgotPasswordForm').hide();
              $('#errorMailMessage').fadeIn()
            }  
        }, 'json')
    }) 

誰か私に手を貸してくれませんか?

よろしく、ゾラン

4

2 に答える 2

1

まず、PHPを変更します...

json_encode(array("success" => "true"));

json_encode(array("success" => true));

そしてまた

json_encode(array("success" => "false"));

json_encode(array("success" => false));

次に、変更して次のようにJSを変更します...

if(r.success == "true") {

に...

if(r.success === true) {

あなたがそこからどのように行くか見てください!


編集: OP と連携して、実際の問題は JS がデータを投稿する方法にあると結論付けました。

var obj = {email: email};

になるはずだった...

var obj = {checkemail: email};

PHP には、問題とは関係のない特定の問題がいくつかありましたが、現在は修正されています。

于 2013-02-23T17:15:32.113 に答える
0
if ($this->form_validation->run() != FALSE) 

する必要があります

if ($this->form_validation->run() !== FALSE) 

または単に

if (!$this->form_validation->run())

false をチェックする最良の方法は次のとおりです... != は、常に期待どおりに機能するとは限りません!

JS で JSON を解析する必要があります。myObj = $.parseJSON(r);

次に使用するmyObj.success

于 2013-02-21T16:31:54.713 に答える