Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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
您可以使用javaScript访问值的JSON表示吗?_Javascript_Jquery - Fatal编程技术网

您可以使用javaScript访问值的JSON表示吗?

您可以使用javaScript访问值的JSON表示吗?,javascript,jquery,Javascript,Jquery,如何访问javaScript中的“值的JSON表示”? 我使用了AJAX调用的json\u encode和echo结果,得到了json对象,PHP手册称之为“json\u encode-返回值的json表示”。 下面是一个简短的示例,说明我在控制台记录变量时得到的结果 {"RECORD_NUM":1002,"DATE_FIELD":"1747-01-19","DESCRIPTION":"Johann Bode founder of \"Bode's Law \" dies"}, {"RECORD

如何访问javaScript中的“值的JSON表示”? 我使用了AJAX调用的
json\u encode
echo
结果,得到了json对象,PHP手册称之为“json\u encode-返回值的json表示”。 下面是一个简短的示例,说明我在控制台记录变量时得到的结果

{"RECORD_NUM":1002,"DATE_FIELD":"1747-01-19","DESCRIPTION":"Johann Bode founder of \"Bode's Law \" dies"},
{"RECORD_NUM":1111,"DATE_FIELD":"1770-01-19","DESCRIPTION":"Battle of Golden Hill (Lower Manhattan)"}]  
下一步将是使用
JSON解析“response”。解析

returnedArray=JSON.parse(response);
要访问JavaScript中的JSON对象,请使用JSON.parse()解析它,然后通过“.”或“[]”访问它

如果
JSON.parse
像在我的例子中一样失败,我会问一个问题“你怎么能不能访问返回的”值的JSON表示?” 这里是一个小的html文件,我通过声明一个javaScript变量来测试它,但不使用“值的JSON表示” 这个文件按我的预期工作

<!DOCTYPE html><html>
<head>
    <title>JSON value</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <div>TODO write content</div>
    <!--Call a javaScript-->
    <script type="text/javascript" src="js/jquery-2.2.0.min.js"></script>
    <script>
        $("document").ready(function () {
            var response = [
                {"RECORD_NUM": 967, "DATE_FIELD": "1736-01-19", "DESCRIPTION": "James Watt, inventor of the steam engine, was born in Scotland."},
                {"RECORD_NUM": 1002, "DATE_FIELD": "1747-01-19", "DESCRIPTION": "Johann Bode founder of \"Bode's Law \" dies"},
                {"RECORD_NUM": 1111, "DATE_FIELD": "1770-01-19", "DESCRIPTION": "Battle of Golden Hill (Lower Manhattan)"}
            ];
            dataCheck = response[0].DATE_FIELD;
            console.log("dataCheck = " + dataCheck + "\n");
        });
    </script>
</body>
</html>
如果在AJAX成功调用中使用上述代码,则会出现错误:

            success: function (response) {
            console.log("Returned data = RESPONSE: \n" + response + "\n\n");
             dataCheck = response[0].DATE_FIELD;
            console.log("dataCheck = " + dataCheck + "\n");
控制台日志:

queryDatabase02.js:39 Returned data = RESPONSE: 
[{"RECORD_NUM":967,"DATE_FIELD":"1736-01-19","DESCRIPTION":"James Watt, inventor of the steam engine, was born in Scotland."},
{"RECORD_NUM":1002,"DATE_FIELD":"1747-01-19","DESCRIPTION":"Johann Bode founder of \"Bode's Law \" dies"},
{"RECORD_NUM":1111,"DATE_FIELD":"1770-01-19","DESCRIPTION":"Battle of Golden Hill (Lower Manhattan)"},
        ...
}]
所以问题是,“我如何访问javaScript中的“值的JSON表示形式” 回答——“你不能”

在检查PHP文件中只有一个echo以及发送头之后,我发现在echo json_编码之前删除头文本 不会导致错误。以下是PHP文件的结尾:

// json_encode — Returns the JSON representation of a value
$jsonVal = json_encode($timeRtr);
$fileHandle = fopen('storage\jsonStorage', "a") or die("Unable to open file!");
fwrite($fileHandle, $jsonVal);
fwrite($fileHandle, "\n");
fclose($fileHandle);
//header('Content-Type: application/json');
echo ($jsonVal);
?> 下面是javascript文件queryDataBase02.js

$("document").ready(function () {
$("button[name='History']").click(function (e) {
    // so the form does not get submitted
    e.preventDefault();
    var displayStr = "";
    var theQuery = {queryString: "SELECT * FROM time_table WHERE" +
                " EXTRACT(MONTH FROM DATE_FIELD ) = DATE_FORMAT(NOW()," +
                " '%c')  AND  EXTRACT(DAY FROM DATE_FIELD ) = DATE_FORMAT    (NOW     (), '%e')" +
                " ORDER BY DATE_FIELD]}"};
    console.log("\t THEObject = " + theQuery + "\n");
    $.ajax({
        type: "POST",
        //                   dataType: "json",
        url: "queryDatabase02.php",
        data: theQuery,
        success: function (response) {
            console.log("Returned data = RESPONSE: \n" + response + "\n\n");
            dataCheck = response[0].DATE_FIELD;
            console.log("dataCheck on response " + dataCheck + " \n");


            // How big is response
            responseCnt = response.length;
            console.log("responseCnt = " + responseCnt + "\n");

            // Access the data ...
            displayArray = JSON.parse(response);
            console.log("THIS IS display STRING:\n" + displayArray + "\n");
            dataCheck = displayArray[0].DATE_FIELD;
            console.log("dataCheck Second time = " + dataCheck + "\n");
            console.log("LEAVING .............\n");
        }
    });
    return false;
    });
});
这里是PHP文件中带有和不带头的控制台输出

WITH -- "header('Content-Type: application/json');"

queryDatabase02.js:10    THEObject = [object Object]
queryDatabase02.js:17 Returned data = RESPONSE: 
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object]

queryDatabase02.js:19 dataCheck on response 1736-01-19 
queryDatabase02.js:24 responseCnt = 28
VM211:1 Uncaught SyntaxError: Unexpected token o
$.ajax.success  @   queryDatabase02.js:27
i   @   jquery-2.2.0.min.js:2
j.fireWith  @   jquery-2.2.0.min.js:2
z   @   jquery-2.2.0.min.js:4
(anonymous function)    @   jquery-2.2.0.min.js:4
==========================================================
不带--“头('Content-Type:application/json');”

。。。。 [对象]

queryDatabase02.js:30 dataCheck Second time = 1736-01-19

queryDatabase02.js:31 LEAVING .............

最后,我注意到了记录计数的差异,无论是否有PHP文件的头信息。

您是否尝试过JSON.Parse(response)?您已经找到了“特定”问题的答案。。。“如何访问值的JSON表示”。。。这是
json\u encode()
您缺少对
success
函数中的
json.parse()
的调用。您还可以在
$.ajax
调用中使用
数据类型:“json”
,jQuery将自动为您解析响应。当您尝试使用
json.parse(response)
时,会出现什么错误?请确保PHP脚本不会输出除
echo json_encode()
调用之外的任何内容。转到开发人员工具的网络选项卡,查看对调用的响应,确保JSON前后没有HTML。
WITH -- "header('Content-Type: application/json');"

queryDatabase02.js:10    THEObject = [object Object]
queryDatabase02.js:17 Returned data = RESPONSE: 
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object],
[object Object],[object Object],[object Object],[object Object]

queryDatabase02.js:19 dataCheck on response 1736-01-19 
queryDatabase02.js:24 responseCnt = 28
VM211:1 Uncaught SyntaxError: Unexpected token o
$.ajax.success  @   queryDatabase02.js:27
i   @   jquery-2.2.0.min.js:2
j.fireWith  @   jquery-2.2.0.min.js:2
z   @   jquery-2.2.0.min.js:4
(anonymous function)    @   jquery-2.2.0.min.js:4
==========================================================
queryDatabase02.js:30 dataCheck Second time = 1736-01-19

queryDatabase02.js:31 LEAVING .............