使用JSON从PHP到Javascript的关联数组
我正在尝试将一个关联数组从PHP发送到Javascript。但是,由于某些原因,输出是未定义的。代码如下: PHP(虚拟数组):使用JSON从PHP到Javascript的关联数组,php,javascript,json,Php,Javascript,Json,我正在尝试将一个关联数组从PHP发送到Javascript。但是,由于某些原因,输出是未定义的。代码如下: PHP(虚拟数组): $validationErrors = array("unregisteredName" => NULL, "unregisteredEmail" => "Invalid e-mail", "unregisteredUsername" => NULL, "unregisteredPassword" => NULL); $log = arra
$validationErrors = array("unregisteredName" => NULL,
"unregisteredEmail" => "Invalid e-mail", "unregisteredUsername" => NULL,
"unregisteredPassword" => NULL);
$log = array("errors" => $validationErrors);
echo json_encode($log);
var addUserCallback = function(data) {
if(data.errors && data.errors.length) {
$.each(data.errors, function(index, error) {
console.log(error);
$("#"+index).attr("placeholder", error);
});
}
else {
window.location="/users/success/";
}
};
var errorCallback = function(xhr, status, error) {
console.log(arguments);
};
self.addUser = function() {
var data = {
unregisteredName: $("#unregisteredName").val(),
unregisteredEmail: $("#unregisteredEmail").val(),
unregisteredUsername: $("#unregisteredUsername").val(),
unregisteredPassword: $("#unregisteredPassword").val()
};
$.post(addUserUrl, data).success(addUserCallback)
.error(errorCallback);
}
Javascript:
$validationErrors = array("unregisteredName" => NULL,
"unregisteredEmail" => "Invalid e-mail", "unregisteredUsername" => NULL,
"unregisteredPassword" => NULL);
$log = array("errors" => $validationErrors);
echo json_encode($log);
var addUserCallback = function(data) {
if(data.errors && data.errors.length) {
$.each(data.errors, function(index, error) {
console.log(error);
$("#"+index).attr("placeholder", error);
});
}
else {
window.location="/users/success/";
}
};
var errorCallback = function(xhr, status, error) {
console.log(arguments);
};
self.addUser = function() {
var data = {
unregisteredName: $("#unregisteredName").val(),
unregisteredEmail: $("#unregisteredEmail").val(),
unregisteredUsername: $("#unregisteredUsername").val(),
unregisteredPassword: $("#unregisteredPassword").val()
};
$.post(addUserUrl, data).success(addUserCallback)
.error(errorCallback);
}
以下是我从Chrome的检查员那里得到的信息:
数据:”↵{“errors”:{“unregisteredName”:null,“unregisteredMail”:“无效电子邮件”,“unregisteredUsername”:null,“unregisteredPassword”:null}}”
数据。错误:
未定义
所以,现在发生的事情是,即使在“data”变量上获取数据,因为它是未格式化的,所以它总是重定向到“success”页面
有什么想法吗?您需要告诉jQuery解析JSON字符串
$.post(addUserUrl, data, 'json').success(addUserCallback).error(errorCallback);
虽然我通常会将成功回调传递给$。post
$.post(addUserUrl, data, addUserCallback, 'json').error(errorCallback);
您需要告诉jQuery解析JSON字符串
$.post(addUserUrl, data, 'json').success(addUserCallback).error(errorCallback);
虽然我通常会将成功回调传递给$。post
$.post(addUserUrl, data, addUserCallback, 'json').error(errorCallback);
因为数据
是一个字符串。您需要先解析JSON字符串并提取对象,因为data
是一个字符串。您需要首先解析JSON字符串并提取您的对象。或者,实际上,如果不使用jQuery AJAX,请查找“JSON.parse”。我还建议在返回JSON时将application/JSON设置为内容类型(这样jQuery就可以在不使用数据类型的情况下找到它,但最好同时使用这两种类型)。这比我想象的要简单得多。我确实尝试将“json”放在$.post
中,但我将成功回调传递到了外部。。。可能是因为不了解参数。非常感谢。@Falasion:不客气。我从来没有使用过.success
,我猜它的作用是不同的。或者——事实上,如果不使用jQuery AJAX,请查找“JSON.parse”。我还建议在返回JSON时将application/JSON设置为内容类型(这样jQuery可能可以在不使用数据类型的情况下找到它,但最好两者都做).比我想象的容易多了。我确实尝试将“json”放在$.post
中,但我将成功回调传递到了外部。。。可能是因为不了解参数。非常感谢。@Falasion:不客气。我从来没有使用过.success
,我想它的作用是不同的。