使用JSON从PHP到Javascript的关联数组

Fal*_*ion 0 javascript php json

我正在尝试从PHP发送关联数组到Javascript.但是,由于某种原因,输出是未定义的.这是代码:

PHP(虚拟数组):

$validationErrors = array("unregisteredName" => NULL,
"unregisteredEmail" => "Invalid e-mail", "unregisteredUsername" => NULL, 
"unregisteredPassword" => NULL);

$log = array("errors" => $validationErrors);
echo json_encode($log); 
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

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);
}
Run Code Online (Sandbox Code Playgroud)

这是我从Chrome的Inspector得到的:

data: "?{"errors":{"unregisteredName":null,"unregisteredEmail":"Invalid e-mail.","unregisteredUsername":null,"unregisteredPassword":null}}"
data.errors: Undefined

所以,正在发生的事情是,即使获取"数据"变量的数据,由于它是未格式化的事实,它总是重定向到"成功"页面.

有任何想法吗?

Roc*_*mat 6

您需要告诉jQuery解析JSON字符串.

$.post(addUserUrl, data, 'json').success(addUserCallback).error(errorCallback);
Run Code Online (Sandbox Code Playgroud)

虽然我通常将成功回调传递给 $.post

$.post(addUserUrl, data, addUserCallback, 'json').error(errorCallback);
Run Code Online (Sandbox Code Playgroud)

  • 我还建议在返回JSON时将application/json设置为内容类型(这样jQuery可能能够在没有数据类型的情况下解决它 - 但两者都更好). (2认同)