Javascript 如何获取JSON字符串中的数据
大家好,我正试图在我的网页上显示单词Javascript 如何获取JSON字符串中的数据,javascript,json,node.js,Javascript,Json,Node.js,大家好,我正试图在我的网页上显示单词“hello JSON”,但它显示的是完整的字符串{“msg”:“hello JSON.”}。我知道它为什么要这样做,但是我如何才能让它只显示hello JSON,而不只是将它放到html脚本中并使用它呢 这是我的代码: var http = require('http'); var domain = require('domain'); var root = require('./message'); // do I have to replace root
“hello JSON”
,但它显示的是完整的字符串{“msg”:“hello JSON.”}
。我知道它为什么要这样做,但是我如何才能让它只显示hello JSON
,而不只是将它放到html脚本中并使用它呢
这是我的代码:
var http = require('http');
var domain = require('domain');
var root = require('./message'); // do I have to replace root w/ message
var image = require('./image'); // for better readability?
function replyError(res) {
try {
res.writeHead(500);
res.end('Server error.');
} catch (err) {
console.error('Error sending response with code 500.');
}
};
function replyNotFound(res) {
res.writeHead(404);
res.end('not found');
}
function handleRequest(req, res) {
console.log('Handling request for ' + req.url);
if (req.url === '/') {
root.handle(req, res);
}
if (req.url === '/image.png'){
image.handle(req, res);
} else {
replyNotFound(res);
}
}
var server = http.createServer();
server.on('request', function(req, res) {
var d = domain.create();
d.on('error', function(err) {
console.error(req.url, err.message);
replyError(res);
});
d.run(function() { handleRequest(req, res)});
});
server.listen(5000);
然后是message.js或root(在min var root=require(/message)中)
app.html
<html>
<header><title>This is title</title></header>
<body>
Hello world
<span id="ajaxButton" style="cursor: pointer; text-decoration: underline">
Make a request
</span>
<script type="text/javascript">
(function() {
var httpRequest;
document.getElementById("ajaxButton").onclick = function() { makeRequest('message.js'); };
function makeRequest(url) {
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
if (!httpRequest) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
httpRequest.onreadystatechange = alertContents;
httpRequest.open('GET', url);
httpRequest.send(msg);
}
function alertContents() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
alert(httpRequest.responseText);
} else {
alert('There was a problem with the request.');
}
}
}
})();
</script>
</body>
</html>
这是标题
你好,世界
提出请求
(功能(){
var-httpRequest;
document.getElementById(“ajaxButton”).onclick=function(){makeRequest('message.js');};
函数makeRequest(url){
如果(window.XMLHttpRequest){//Mozilla,Safari。。。
httpRequest=新的XMLHttpRequest();
}如果(window.ActiveXObject){//IE
试一试{
httpRequest=新的ActiveXObject(“Msxml2.XMLHTTP”);
}
捕获(e){
试一试{
httpRequest=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
捕获(e){}
}
}
如果(!httpRequest){
警报(“放弃:(无法创建XMLHTTP实例”);
返回false;
}
httpRequest.onreadystatechange=alertContents;
httpRequest.open('GET',url);
httpRequest.send(msg);
}
函数alertContents(){
if(httpRequest.readyState==4){
if(httpRequest.status==200){
警报(httpRequest.responseText);
}否则{
警报(“请求有问题”);
}
}
}
})();
尝试将“message.js”文件中的body=data;
更改为body=data.msg;
。这将在JSON对象中查找键msg
,并将结果分配给body变量
编辑
在alertContents
功能中,替换:
alert(httpRequest.responseText);
与:
这样做的目的是将JSON响应解析为Javascript对象,然后查找msg
属性并将其用于警报
编辑2
任何时候需要解析JSON时,都可以使用JSON.parse(jsonString)。它将返回一个本地JavaScript对象,您可以将其存储在变量中并在其上查找属性,如上面的示例所示。我看不到您从何处接收消息,但在接收JSON字符串的位置,只需执行此操作即可
var jsonResult = receivedData();
if (jsonResult && jsonResult.msg)
{
alert(jsonResult.msg);}
}
无论json来自何处,您似乎从未解码过它。请记住,json只是文本。您需要将其解码回原生JS结构,然后才能将其实际用作单片字符串以外的任何东西。什么意思是将其解码回JS结构?我怎么做?我试图使用json.parse做一些事情,但我无法得到它需要抓取单个部分。我会显示服务器错误,而且我从来没有真正调用过。initOk,好吧,无论您在哪里打印数据,只需向其中添加
.msg
,以仅打印消息,而不是整个JSON对象。我想res.end(body)我可以说res.end(body.msg)?这似乎是将其放入无限循环或其他什么,因为页面从未加载。在我的赋值中有一个提示,即使用var resDataString=httpRequest.responseText;var resData=JSON.parse(resDataString);var msg=resData.msg;//但是idk将其放置在何处我必须查看客户端代码。您可以发布它吗?客户端作为app.html吗?从技术上讲,我从不使用它,因为我不调用init。但是如果这对我有帮助,我可以>__
var resData = JSON.parse(httpRequest.ResponseText);
alert(resData.msg);
var jsonResult = receivedData();
if (jsonResult && jsonResult.msg)
{
alert(jsonResult.msg);}
}