繁体   English   中英

将ajax响应数组对象转换为javascript数组?

[英]Convert ajax response array object to javascript array?

我正在使用ajax在Yii中提交登录表单。 这是我的ajax功能:

$("#login-form").submit(function() {

        var email = $("#email").val();
        var password = $("#password").val();

        $.ajax({
            url: "<?php echo Yii::app()->request->baseUrl; ?>/site/validatelogin",
            type: "post",
            data: "email=" + email + "&password=" + password,
            success: function(response) {
                if (response === "1") {
                    window.location.href = "<?php echo Yii::app()->getBaseUrl(true); ?>/dashboard";
                }
                else
                {
                    //Dispaly response errors above login form
                }
            },
            error: function() {
                alert("Could not perform the requested operation due to some error.");
                return false;

            }
        });

    });

我的PHP控制器函数是validatelogin,如下所示:

 $email = $_POST['email'];
    $password = $_POST['password'];


    $model = new LoginForm();

    $model->email = $email;
    $model->password = $password;


    if ($model->validate() && $model->login()) {
        echo "1";
    } else {
        print_r($model->getErrors());
    }

如果用户输入正确的凭据,我发送1作为对视图的响应,并将用户重定向到仪表板。

但是,如果用户输入了错误的凭据,则根据错误的类型,在ajax响应中会收到不同的错误。

我希望通过循环在成功函数的其他部分中显示登录表单上方的那些错误。

但是当我在响应上运行循环时,该数组的长度非常大,例如,如果响应中的错误是“密码不正确”,则响应数组的错误消息中的长度为18(字符数)。 简而言之,响应数组如下:

array('I','n','c','o','r','r'....)

而不是

array([0]=>"Incorrect password")

如何以后一种格式转换响应数组并迭代每个索引以向登录表单上方的用户显示错误消息?

将其编码为JSON

在你的PHP:

echo json_encode($model->getErrors());

在你的js(在其他地方):

var errors = $.parseJSON(response);

编辑:

在你的情况下,总是返回JSON会更好。

您的JS可以更改为:

var jqxhr = $.post("<?php echo Yii::app()->request->baseUrl; ?>/site/validatelogin", {
    email: email,
    password: password
}, 'json');
jqxhr.done(function(response) {
    if (response.valid) {
        window.location.href = "<?php echo Yii::app()->getBaseUrl(true); ?>/dashboard";
    } else {
        if (response.errors) {
            ...
        }
    }
});
jqxhr.error(function(response) {
    alert("Could not perform the requested operation due to some error.");
});

你的PHP:

$response = array('valid' => false);
if ($model->validate() && $model->login()) {
    $response['valid'] = true;
} else {
    $response['errors'] = $model->getErrors();
}
header('Content-type: application/json');
echo json_encode($response);

除了@ sroes的答案,使用Yii库获取JSON

echo CJSON::encode($response);

代替

echo json_encode($response);

为什么?

为什么在使用json_encode时使用CJSON编码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM