Php JSON只返回错误语句的最后一个字母

Php JSON只返回错误语句的最后一个字母,php,jquery,ajax,json,codeigniter,Php,Jquery,Ajax,Json,Codeigniter,我的表单上有一个奇怪的错误,用户可以编辑他/她的信息。每次用户按下 “提交”按钮,它将返回实际错误,但仅返回最后一个字母。我可以用我的开发工具查看错误 这是我的editprofile.php: <?php $this->load->helper('form'); ?> <?php $attributes = array( 'id' => 'update_user_form' ); ?> <?php echo form_op

我的表单上有一个奇怪的错误,用户可以编辑他/她的信息。每次用户按下 “提交”按钮,它将返回实际错误,但仅返回最后一个字母。我可以用我的开发工具查看错误

这是我的editprofile.php:

<?php $this->load->helper('form'); ?>
<?php $attributes = array(
        'id' => 'update_user_form'
    );
?>

<?php echo form_open('users/edit_profile', $attributes); ?>

        <div class="loading_spinner" id="loading_spinner_edit_user" style="display:none;"></div>
        <div class="login_error" id="edit_user_error" style="display:none">
            <span class="close_error">&times;</span>
        </div>
        <div class="front_success" id="edit_user_success" style="display:none"></div>

    <div class="rowi">
        <div class="rowi1">
                <label for="email">Sähköpostiosoite</label>
                <input type="email" name="email" value="<?=$userinfo['email']?>" readonly="readonly" />
                <div id="email_validate"></div>
        </div>

        <div class="rowi2">
            <label for="phone_number">Puhelinnumero</label>
            <input type="text" name="phone_number" value="<?=$userinfo['phone_number']?>" readonly="readonly"/>
        </div>
    </div>

    <div class="rowi">
        <div class="rowi1">
        <label for="password">Uusi salasana</label>
        <input type="password" name="new_password" />
        </div>

        <div class="rowi2">
        <label for="new_password_again">Uusi salasana uudelleen</label>
        <input type="password" name="new_password_again" />
        </div>
    </div>

<div class="rowi">
    <div class="rowi1">
        <input type="password" name="password_to_confirm" placeholder="Salasana" />
    </div>

    <div class="rowi2">
    <input type="submit" name="edit_submit" value="Muokkaa tietojani"
    class="login_submit">
    </div>
</div>

<?php echo form_close(); ?>

<script type="text/javascript">
$(document).ready(function() {
        $("input").on("click", function()
        {
            $(this).removeAttr("readonly");
        });

        $("form#update_user_form").on('submit', function(e) 
        {
            e.preventDefault();

            var from = $("form#update_user_form");

            $.ajax({
                    url: from.attr('action'),
                    type: from.attr('method'),
                    data: $(from).serialize(),
                    }).done(function(data) {

                    if(data.result == 0) {
                        $("#edit_user_success").hide();
                            for (var key in data.error) {
                            var value = data.error[key];
                            var output = '<p>' + value + '</p>';
                         }
                        $("#edit_user_error").fadeIn(1000).show().html(output);
                      }

                    if(data.result == 1) {
                        $("#edit_user_error").hide();
                        $("#edit_user_success").fadeIn(1000).show().html("<p>" + data.success + "</p>");

                      }

                }, 'json');

            return false;

        });
});
</script>
    public function edit_profile() 
    {

        if(!$_POST)
        {
            return false;
        }

        $password_to_confirm = $this->input->post('password_to_confirm');
        $db_password = $this->user_model->password_db_check($this->session->userdata('user_id'));

        if(!$this->phpass->check($password_to_confirm, $db_password['password']))
        {

            $this->output->set_content_type('application_json');
            $this->output->set_output(json_encode(array('result'=>0, 'error' => 'Password didn't match your password')));
            return false;
        }   

        $this->form_validation->set_rules('email', 'Sähköpostiosoite', 'valid_email|required');
        $this->form_validation->set_rules('phone_number', 'Puhelinnumero', 'min_length[7]|max_length[10]');
        $this->form_validation->set_rules('new_password', 'Salasana', 'matches[new_password_again]|min_length[8]');
        $this->form_validation->set_rules('new_password_again', 'Salasana', 'min_length[8]');

        $this->form_validation->set_message('min_length', '%s - kentässä on liian vähän merkkejä');
        $this->form_validation->set_message('matches', 'Uudet salasanat eivät täsmää');
        $this->form_validation->set_message('required', '%s - kenttä on pakollinen');
        $this->form_validation->set_message('is_unique', '%s on jo rekisteröity');

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

            $this->output->set_content_type('application_json');
            $this->output->set_output(json_encode(array('result'=>0, 'error' => $this->form_validation->error_array())));
            return false;

        }

        if(!$this->input->post('email') == "")
        {
            $update_data['email'] = $this->input->post('email');
        }
        if(!$this->input->post('phone_number') == "")
        {

            $update_data['phone_number'] = $this->input->post('phone_number');

        }
        if(!$this->input->post('new_password') == "")
        {
            $update_data['password'] = $this->phpass->hash($this->input->post('new_password'));
        }


        if($this->user_model->edit_user($update_data, $this->session->userdata('user_id')))
        {

            $this->output->set_content_type('application_json');
            $this->output->set_output(json_encode(array('result'=>1, 'success' => 'Success!')));
        }

    }
例如,如果我输入了错误的实际密码来编辑我的信息,JSON会在developer选项卡中显示:

error: "Password didn't match your password"
result: 0
但它只会在error div中输出字母“d”。
控制台在我的javascript中没有显示错误。

似乎
数据。错误是字符串,而不是对象

for (var key in data.error) {
    var value = data.error[key];
    var output = '<p>' + value + '</p>';
}

您的问题是以下代码:

for (var key in data.error) {
    var value = data.error[key];
    var output = '<p>' + value + '</p>';
}

问题是,我也在用JSON返回错误,如果我删除该值变量并用data.error替换它,每次验证出现错误时,我都会将[object]作为输出。
for (var key in data.error) {
    var value = data.error[key];
    var output = '<p>' + value + '</p>';
}
var output = '<p>' + data.error + '</p>';
$("#edit_user_error").fadeIn(1000).show().(output);