JSON响应始终返回true

时间:2013-02-21 16:30:35

标签: json codeigniter

我有解决我的回复的问题,总是解决为真。我提交了一个忘记密码的表单,我只有一个字段,即电子邮件。我根据电子邮件检查数据库中的记录,如果返回记录,我将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文件中检查结果时,我总是如此。这是代码:

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

任何人都可以帮我一把吗?

的问候,卓然

2 个答案:

答案 0 :(得分: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中还存在一些与该问题无关的特定问题,但现在已经修复。

答案 1 :(得分:0)

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

应该是

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

或只是

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

chekc的最佳方式是假的......!=可能并不总是像你期望的那样!

您需要在JS中解析JSON:myObj = $.parseJSON(r);

然后使用myObj.success