无法阅读财产的成功'为null

时间:2014-11-20 23:58:45

标签: javascript jquery

我有以下javascript函数

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

        var memberUserName = $(this).find("#memberUserName").val();
        var memberOldPassword = $(this).find("#memberOldPassword").val();
        alert(memberUserName);
        alert(memberOldPassword);
        var obj = {memberUserName: memberUserName, memberOldPassword: memberOldPassword};
        var url = $(this).attr("action");
        $.post(url, obj, function(r){

            if(r.success) window.location.replace('http://www.example.org/memberAccount/memberDashboard');

            else  $('#errorMessageTop').fadeIn();

        }, 'json')
   })

当我发出警报时,memberOldPassword我得到了未定义。在我的表格中,我有提交,这是代码:

<input type="password" class="good_input" id="memberOldPassword" name="memberOldPassword" style="float:right;width:135px;"/><br />

以下是我的控制器的PHP代码:

 public function loginCheck()
    {     
        // set the validation rules
        $this->form_validation->set_rules('memberUserName', 'Username', 'required|trim|encode_php_tags');
        $this->form_validation->set_rules('memberOldPassword', 'Password', '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) 
        {


            $this->db->where('memberUserName', $this->input->post('memberUserName'));
            $this->db->where('memberOldPassword', strtoupper(md5("EBOSS/".$this->input->post('memberOldPassword')."/EBOSS")));
            $query = $this->membersModel->get();
            if($query)
            {

                $data = array(
                    'memberID'                      => $query[0]['memberID'],
                    'memberUserName'                => $query[0]['memberUserName'],
                    'memberOldPassword'             => $query[0]['memberOldPassword'],
                    'memberEmail'                   => $query[0]['memberEmail'],
                    'isUserLoggedIn' => TRUE
                );           
                $members = $query->result_array();            
                $this->session->set_userdata('currentMember',$data);

                echo json_encode(array("success" => true));
        } else {   
                echo json_encode(array("success" => false, "error" => "Wrong credentials"));
        }
        //  form validation has failed 
        } else {     
            $errorMessage = "Wrong Username or passwrod!";
        }
    }   // end of function loginCheck 

我使用jQuery v1.7.2,PHP版本是5.39

任何人都知道为什么我在修改密码时会得到未定义的内容?

3 个答案:

答案 0 :(得分:1)

检查您的HTML。密码真的在表单标签内吗? find(“#memberOldPassword”)真正返回了什么?控制它!

测试JavaScript:

$("#formLogin").submit(function(e){     
    e.preventDefault();
    var memberOldPassword = $(this).find("#memberOldPassword").val();
    alert(memberOldPassword);
})

更正HTML(警报输入值):

<form id="formLogin">
    <input type="password" class="good_input" id="memberOldPassword" name="memberOldPassword" style="float:right;width:135px;"/><br />
    <input type="submit" value="Submit"/>
</form>

错误的HTML(警报未定义):

<form id="formLogin" >
    <input type="submit" value="Submit"/>
</form>
<input type="password" class="good_input" id="memberOldPassword" name="memberOldPassword" style="float:right;width:135px;"/><br />

答案 1 :(得分:1)

$(这个)显然没有引用表单,因为您使用的是id,您可能也会这样做

var memberOldPassword = $("#memberOldPassword").val();

http://jsfiddle.net/mkhftwqv/

答案 2 :(得分:0)

您需要发布服务器响应的示例。假设它是有效的JSON,它必须包含这样的成功属性:

{
    success: ...
}

否则将是未定义的。

然而,查看您的代码,这可能是您正在寻找的内容:

$.post(url, obj).done(function(r) {
    window.location.replace('http://www.example.org/memberAccount/memberDashboard');
}).fail(function(r) {
    $('#errorMessageTop').fadeIn();
});

.done().fail()函数旨在处理成功和失败的具体情况。如果需要使用服务器响应,可以在回调函数中执行此操作,其中响应作为r传递。