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

您应该使用 $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 call 应该如下所示:

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

您也不需要传递 obj 。此外,您需要记录 data.success,而不仅仅是成功。让我知道

于 2013-02-19T17:02:00.883 回答
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 回答