您可以使用javaScript访问值的JSON表示吗?
如何访问javaScript中的“值的JSON表示”? 我使用了AJAX调用的您可以使用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
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 .............