php给ajax返回数组对象,关于php:将ajax响应数组对象转换为javascript数组?

我使用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响应中会收到不同的错误。

我想通过循环在success函数的其他部分的登录表单上方显示这些错误。

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

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

而不是

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

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

字符串只是字符数组。我希望您正在迭代一个字符串。请console.log(response);编辑有结果的问题,并在登录表单上显示//显示响应错误的代码。

将其编码为json。

在您的PHP中:

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

在您的JS中(在else中):

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);

如果设置了正确的JSON头,就不需要使用ParseJSON。最好总是发送JSON,而不仅仅是错误。如echo json_encode(array('success'=>false, 'errors'=>$model->getErrors());表示失败,echo json_encode(array('success'=>true, 'errors'=>'');表示成功。

是的,我同意在这种情况下最好始终返回JSON。这要求您提供正确的dataType。

我用一个例子更新了我的答案。

感谢您的所有回复。我想当我回到办公室的代码时,它会解决这个问题。谢谢!

除了@sroes的答案,使用yii库进行json

echo CJSON::encode($response);

而不是

echo json_encode($response);

为什么?

当我们有json_编码时为什么要使用cjson编码?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值