Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JSON从PHP到Javascript的关联数组_Php_Javascript_Json - Fatal编程技术网

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

使用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

我正在尝试将一个关联数组从PHP发送到Javascript。但是,由于某些原因,输出是未定义的。代码如下:

PHP(虚拟数组):

$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
,我想它的作用是不同的。