【问题标题】:How to obtain JSON from server on client side using node.js?如何使用 node.js 从客户端的服务器获取 JSON?
【发布时间】:2016-05-26 23:55:06
【问题描述】:

我已经在这工作了几个小时,并且不得不问另一组敏锐的眼睛。提前致谢。

基本上,当我访问我的 URL(例如 55.55.55.55/select)时,它会从数据库发送 JSON 数据以供查看。

现在在客户端,我尝试访问数据,但由于某种原因无法访问。 ****顺便说一句,我确实单击触发了eventListener。 我尝试了许多不同的方法,例如更改代码和研究,但仍然无法弄清楚。

 document.getElementById('clicks').addEventListener('click', function(event){
var req = new XMLHttpRequest();

var reqString = url + "/select";

req.open('GET', reqString, true);


req.addEventListener('load',function() {
if (req.status >= 200 && req.status < 400) {

    var response = req.responseText; // used to be var response = 

    // JSON.parse(req.responseText);
    document.getElementById('status').textContent = req.responseText;

    //console.log(response);
    //alert(response.name[0]);
    selectOption(response);
    //document.getElementById('status')..responsetext = req.responseText;

}else {
        // If a server error was received, post the response text to the   log
        console.log("Error in network request: " + req.statusText);
   }
   });

   req.send();

 //event.preventDefault();
 }); 


//html
<form id="clicks">
    <fieldset>
        <legend>Data</legend>
        <p>
            <input type="submit" class="buttons" id="submitBtn" name="submitBtn">
        </p>
    </fieldset>
   </form>

<p id="status"></p>
<div>
    <select id="selectNumber">
        <option>Choose a Hotel</option>
    </select>
</div>
<script src="/script.js">

</script>

编辑: (不是问题):hotelScript.js:43 XMLHttpRequest 无法加载 %55.55.55.55/select。跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https、chrome-extension-resource。

【问题讨论】:

  • “由于某种原因不能”相当模糊。怎么了?控制台上报告了什么?加载事件处理程序是否触发?您是否在浏览器的开发人员工具的网络选项卡中看到该请求?反应如何?
  • 我没有从控制台日志中得到任何输出。让我尝试仔细检查开发工具。
  • 您的网址看起来如何。是http://something 还是file:///somepath ??我的意思是你的 HTML 页面 URL。
  • 其实是http://something

标签: javascript json node.js


【解决方案1】:

我认为您可以使用以下方法将结果解析为 json: var obj = JSON.parse(queryObj.jsonData);

【讨论】:

  • 没有区别。两者似乎没有互动。
【解决方案2】:

问题是同域来源策略(限制)。您的服务器的 URL 地址应与浏览器 url 的 PORT、HOST 和协议完全匹配。

如果 node.js 在与您的 Web 应用程序不同的端口(甚至主机)上运行,您必须在 Web 服务器上创建反向代理。

【讨论】:

    【解决方案3】:

    您的 url 变量究竟是什么样的? 它似乎错过了 http:// 前缀。 确保它在网址中...

    【讨论】:

    • 你是如何在浏览器中运行你的客户端 HTML 代码的?在本地主机网络服务器上还是作为文件?您的浏览器网址栏中写的是什么? http:// 或 file:/// ?
    【解决方案4】:
    req.setRequestHeader("Content-Type", "application/json");
    req.end(JSON.stringify(payload));
    

    加载后需要这些

    【讨论】:

      【解决方案5】:

      首先尝试在导航器中访问 URL 并查看是否获得 de JSON。

      无论如何,我认为你必须将send 更改为end

      res.end(tableInfo);
      

      end 函数关闭连接。然后导航器知道传输已结束,所有数据都已传输

      也要改

      req.addEventListener('load',function() {
      

      通过

      req.addEventListener('onreadystatechange',function() {
      

      【讨论】:

      • 是的,当我直接转到 55.55.55.55/select 但不是从其他页面时,我得到了 JSON。
      • 您是否尝试将send 更改为end?也尝试将document.getElementById('status').innerHTML = req.responseText; 更改为document.getElementById('status').textContent = req.responseText;
      • 还是一样,这可能是 EventListener 问题,虽然我不明白为什么,开发工具上没有显示 eventListener。
      猜你喜欢
      • 2019-03-19
      • 2021-05-06
      • 2012-10-31
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      相关资源
      最近更新 更多