如何从php数组

时间:2015-10-22 16:29:52

标签: javascript php arrays json

我正在做一些我不明白的事情。在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;

}

请帮助我排除这个错误。

2 个答案:

答案 0 :(得分:1)

只需使用json函数json_encodejson_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;