Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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_Json_Node.js - Fatal编程技术网

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);}
}