Javascript PHP解析PDO获取为JSON

Javascript PHP解析PDO获取为JSON,javascript,php,mysql,json,pdo,Javascript,Php,Mysql,Json,Pdo,我试图获取一个PHP文件来执行MySQL查询,并将结果以JSON格式返回给Javascript函数 我的php: require_once("class.user.php"); $auth_user = new USER(); $stmt = $auth_user->runQuery(" SELECT * FROM projects; "); $stmt->execute(); $results=$stm

我试图获取一个PHP文件来执行MySQL查询,并将结果以JSON格式返回给Javascript函数

我的php:

require_once("class.user.php");
$auth_user = new USER();

$stmt = $auth_user->runQuery("
        SELECT *
        FROM projects;
");                       
$stmt->execute();
$results=$stmt->fetchall(PDO::FETCH_ASSOC); 

file_put_contents('filename.json',json_encode($results));

header('Content-type: application/json');
echo json_encode($results);
我的Javascript:

function getProjectNames(){
var dataList = document.getElementById('projectNames');
if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
} else {
    // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        IsJsonString(this.response);
        //document.getElementById("projectsresults").innerHTML = this.response;
    }
};
xmlhttp.open("GET","getProjectNames.php",true);
xmlhttp.send(null);
}
function IsJsonString(str) {
    try {
        document.write(JSON.stringify(str));
    } catch (e) {
        document.write("is not valid JSON" + e);
        return false;
    }
    //document.write("is valid JSON");
    return true;
}
现在将显示javascript

[{"Project_ID":"1","Name":"Software Project 1"},{"Project_ID":"2","Name":"Software Project 2"}]
但是,如果我尝试将其解析为JSON并访问一个变量,那么它要么返回“undefined”要么返回“null”。我尝试了“JSON.stringify”,结果是

"\r\n\r\n\r\n\r\n\r\n\r\n[{\"Project_ID\":\"1\",\"Name\":\"Software Project 1\"},{\"Project_ID\":\"2\",\"Name\":\"Software Project 2\"}]\r\n"
所以我认为PHP编码JSON和Javascript获取JSON之间一定出了问题。我已经没有主意了,任何帮助都将不胜感激


编辑:添加了其余的PHP和Javascript代码

尝试使用此函数而不是IsJsonString函数:

function IsJsonString(response){
    var parsedJson = JSON.parse(response);
    var jsonString = JSON.stringify(parsedJson);

    document.getElementById("projectNames").innerHTML = jsonString;
}

然后将其作为参数传递。response。

可能有点晚,但问题仍然与许多人有关。 要做的第一件事是验证PDO驱动器是否为JSON对象创建了正确的UTF8编码格式

服务器端

    <?php
    try {
    $db = new PDO('mysql:host=localhost;dbname=dbAnme', "user",  "pass!",
                  array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));//here
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


   //Query
echo json_encode($result, JSON_PRETTY_PRINT);


  } catch (PDOException $e) {
      print "Error!: " . $e->getMessage() . "<br/>";
      die();
  }
    ?>

Javascript控制台中有任何错误吗?您能提供使用toe访问json响应的代码吗?我怀疑那里有错误。您是否试图在
onreadystatechange
函数之外访问
JSON.parse()
的结果?这不会起作用,因为它是异步的仍然在JSON.parse上出错,错误为:“位置0处的JSON中出现意外标记<”。当我最初在PHP中编码时,似乎没有正确执行。尝试访问手动输出json的PHP页面,复制它并转到该网站:然后将json粘贴到那里,它将告诉您json是否有效。
var myObj =[];

     xmlhttp = new XMLHttpRequest();
     xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {

          myObj = JSON.parse(this.responseText);
//now you can access to properties...
       
       console.log(myObj.projectsProperty);
       console.log(JSON.strinify(myObj));
    }
};
xmlhttp.open("GET","getProjectNames.php",true);
xmlhttp.send(null);