我在将 JSON 从 PHP 返回到 Javascript 时遇到问题。下面是我创建 JSON 的 PHP:
$environment[] = array('id' => $env, 'adjacencies' => $hostnames);
foreach($hostnames as $hostname) {
$environment[] = array('id' => $hostname, 'name' => $hostname, 'data' => array());
}
return json_encode($environment);;
当我将 json_encode 环境打印到文本文件时,它返回为:
[{"id":"Dev","adjacencies":["tb23","tbwag","tbvg","tbut"]},{"id":"tb23","name":"tb23","data":[]},{"id":"tbwag","name":"tbwag","data":[]},{"id":"tbvg","name":"tbvg","data":[]},{"id":"tbut","name":"tbut","data":[]}]
看起来这打印正确,但是当我将它返回到 Javascript 时,它返回为 undefined/null。下面是带有 ajax 调用的 javascript:
var ajax = new AJAX();
var args = "id=" + $("#apps").val() + "&env=" + node.id + "&nocache=" + (new Date()).valueOf();
ajax.connect("POST", "http://" + window.location.hostname + "/project/graph/host", args, function(json) {
var output = '';
for (property in json) {
output += property + ': ' + json[property]+'; ';
}
alert(output);
});
我显然已经尝试了很多不同的方法来打印它,但没有任何运气。在 PHP 中,我尝试过 json_last_error,它返回为“0”,这意味着 JSON 结构没有问题。
最后,我想在 Javascript 中使用以下命令来继续构建我的图表:
var hostNodes = eval('(' + json + ')');
感谢任何帮助来解释为什么我无法让它回来!
最佳答案
将 PHP 代码保存在一个唯一的文件中,该文件接收一个 post 参数,然后构造 json 数组(如果已设置),在底部您可以执行此操作
echo json_encode($json);
flush();
我不是纯javascript的专业人士,也不熟悉你的方法,但你应该考虑使用jQuery,至少我会建议一种接收json数组的方法,以便你可以轻松工作用它(你还要确保数据是json):
$.ajax(
{
// Post select to url.
type : 'post',
url : 'myPHPAjaxHandler.php',
dataType : 'json',
data :
{
'select' : true
},
success : function(data)
{
// PHP has returned a json array.
var id, hostname;
for(var i = 0; i < data.length; i++)
{
id = data[i].id;
hostname = hostname[i].id;
// Construct a string or an object using the data.
}
},
complete : function(data)
{
// Optional.
}
});
就像我说的,你可以决定是否选择它。对于复杂的项目来说它可以变得很方便。
关于PHP json_encode 到 Javascript 未定义/空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15386962/