我正在做一些我不明白的事情。在O.O.P中编写了一个PHP代码,从中获取的值是对象。但我想将此O.O.P对象转换为javascript数据以供javascript使用。所以我将我的转换后的对象转换为php端的数组。尝试在其上使用json_encode函数,脚本只是保持返回错误。所以我尝试使用功能我范围,它工作但js继续拒绝数据。 以下是JS文件
var ajax = new XMLHttpRequest();
ajax.open('GET','user.php',true);
ajax.setRequestHeader("Content-type","application/json");
ajax.onreadystatechange = function(){
if(ajax.readyState == 4 && ajax.status ==200){
var data = JSON.parse(ajax.responseText.trim());
console.log(data);
console.log(data[username]);
}
}
ajax.send();
它将返回此错误“SyntaxError:JSON.parse:JSON数据的第1行第129行的字符串文字中的错误控制字符” 没有JSON.parse,它会从data.username控制台日志返回undefind。以下是PHP SCRIPT
//header("Content-type: application/json");
require_once 'core/init.php';
function array2json($arr) {
/*if (function_exists('json_encode')) {
echo "string";
return json_encode($arr);
}*/
$pars = array();
$is_list = false;
$keys = array_keys($arr);
$max_length = count($arr) - 1;
if (($keys[0] == 0) and($keys[$max_length] == $max_length)) {
$is_list = true;
for ($i = 0; $i < count($keys); $i++) {
if ($i != $keys[$i]) {
$is_list = false;
break;
}
}
}
foreach($arr as $key => $value) {
if (is_array($value)) {
if ($is_list) $parts[] = array2json($value);
else $part[] = '"'.$key.
':'.array2json($value);
} else {
$str = '';
if (!$is_list) $str = '"'.$key.
'"'.
':';
if (is_numeric($value)) $str. = $value;
elseif($value === false) $str. = 'false';
elseif($value === true) $str. = 'true';
else $str. = '"'.addslashes($value).
'"';
$parts[] = $str;
}
}
$json = implode(',', $parts);
if ($is_list) return '['.$json.
']';
return '{'.$json.
'}';
}
$user = new User();
$json = array();
if (!$user - > is_LOggedIn()) {
echo "false";
} else {
foreach($user - > data() as $key => $value) {
$json[$key] = $value;
//$json =json_encode($json,JSON_FORCE_OBJECT);
//echo $json;
}
/*$details = '{"'.implode('", "', array_keys($json)).'"';
$data = '"'.implode('" "', $json).'"}';
die($details.' / '.$data);*/
$json = array2json($json);
print $json;
}
请帮助我排除这个错误。
答案 0 :(得分:1)
只需使用json函数json_encode
和json_decode
将数组转换为json字符串,反之亦然:
$myArray = array("value1", "value2");
echo json_encode($myArray);
答案 1 :(得分:1)
您需要设置响应标头,并确保您没有违反CORS:
/*
* Construct Data Structure
*/
$response =
[
'value1',
'value2'
];
/*
* Format Data
*/
$jsonResponse = json_encode ( $response, JSON_PRETTY_PRINT );
/*
* Prepare Response
*/
header('content-type: application/json; charset=UTF-8');
/*
* ONLY if you want/need any domain to be able to access it.
*/
header('Access-Control-Allow-Origin: *');
/*
* Send Response
*/
print_r ( $jsonResponse );
/*
* Return with intended destruction
*/
die;