簡體   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