0

私の見解では codeigniter コントローラーから応答を得ようとしていますが、成功しません。私のjavascriptファイルのコードは次のとおりです。

 // user enter his e-mail so check him against the database.
   $("#formSendPassword").submit(function(e){     

       e.preventDefault();

        var email = $(this).find("#checkemail").val();

        var obj = {email: email};
        var url = $(this).attr("action");
        var data =  {email: email};

        $.post(url, obj,data, function(jsonResp){
           console.log(success);
            if(jsonResp.success) {
                     alert(jsonResp['success']);
                    $('#successMailMessage').fadeIn();

          }  else {
                    alert("Fail");
                    $('#errorMailMessage').fadeIn();
                    }

        }, 'json');
    })

私のコントローラーのコードは次のとおりです。

 public function checkEmail()
    {     
        // set the validation rules
        $this->form_validation->set_rules('checkemail', 'E-Mail', 'valid_email|required|trim|encode_php_tags');

        $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']
                ); 

                $jsonResp['success'] = "Ok";
                $jsonResp = array();
        } else {   
               // echo json_encode(array("success" => false, "error" => "Wrong email"));
                $jsonResp['success'] = "Fail";
        }
        //  form validation has failed 
        } else {     
            $errorMessage = "Please enter valid e-mail";
        }
    }   // end of function checkEmail 

ご覧のとおり、js ファイルで成功を console.log しようとしていますが、成功していません。誰が私が間違っているのか教えてもらえますか?

よろしく、ゾラン

4

2 に答える 2

0

コントローラーは最終データを設定していますが、それを印刷していません。配列が json_encode を使用して json に変換されてから印刷されていることがわかりませんでした。

それを試してみてください。さらに、配列にデータを入力しているのに、なぜ再び = array() を実行しているのですか?

$jsonResp['success'] = "Ok";
$jsonResp = array();

このリンクが役立つかどうかを確認してください: http://amitavroy.com/justread/content/articles/getting-ajax-data-using-views-codeigniter

于 2013-02-19T17:06:51.970 に答える
0

$data 配列要素を使用して、json 応答をビューに渡す前に格納する必要があります。このビューは、JavaScript コールバックが探している json 応答です。私の推測では、コンソール ログの呼び出しは決して発生しないと思います。

次のことを試してください。

あなたのコントローラーコードでは、次のようなものです:

 $data['json'] = json_encode(array("success" => false, "error" => "Wrong email"));
 $this->load->view('json_response', $data);

次のようにビューを定義します。

<?php
    $this->output->set_header('Content-Type: application/json; charset=utf-8');
    echo $json;
?>

また、jQuery 呼び出しでデータ型を定義する必要があります (dataType: "json")。

編集: したがって、jQuery の post 呼び出しは次のようになります。

$.post(url, data, function(data) {
    console.log(data.sucess);
}, "json");

obj も渡す必要はありません。さらに、成功だけでなく、data.success をログに記録する必要があります。お知らせ下さい

于 2013-02-19T17:02:00.883 に答える