【问题标题】:Node js response produces "SyntaxError: JSON.parse: unexpected end of data"节点 js 响应产生“SyntaxError: JSON.parse: unexpected end of data”
【发布时间】:2018-10-02 21:57:16
【问题描述】:

我尝试使用 AJAX 将 Node 连接到一个简单的表单。我有两个文件。

  • 第一个是带有文本框和按钮的 html 文件。
  • 第二个是响应请求的节点服务器。

我的目标是接收来自用户的 id(在文本框中)并将其传递给节点服务器(使用 AJAX 调用),节点服务器以 JSON 格式返回 id 和相应的名称。

下面是我的代码。

The HTML File with AJAX call
<head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        </head>

<body>
    <input type="text" id="guid" />
    <input type="button" id="submit" value="Get" />
</body>

<script>
    $('#submit').click(function() {              
            var id=$('#guid').val();;
                    $.ajax({
                        type: 'OPTIONS',
                        contentType: 'application/JSON;  charset=utf-8',
                        url: 'http://localhost:3300/in/'+id,                        
                        success: function(data) {
                            alert("sucess");
                            alert(data);
                        },
                        error: function() {
                            alert("failed");
                        },

                    });
        });
</script>

产生的错误是

SyntaxError:JSON.parse:第 1 行第 1 列的数据意外结束 JSON 数据

第二个文件是我的节点服务器文件 info.js

const expr = require('express');
const app = expr();
app.disable('etag');
app.use(expr.json());
var data=[
  {id:"1",name:"aaa"},
  {id:"2",name:"bbb"},
  {id:"3",name:"ccc"}
];
app.options('/in/:id', function(req, res){
  const result = data.find(d=>d.id===req.params.id);
  res.set({'Content-Type': 'application/json; charset=utf-8'});
  res.send(JSON.stringify(result));
  console.log(JSON.stringify(result));
});
app.listen(3300);
console.log("listening to port 3300");

在上面的代码中,我将方法从“GET”更改为“OPTIONS”,因为 AJAX 调用使用 OPTIONS 作为其请求类型。我已经在控制台上记录了 JSON 数据,它会为请求的 id 返回一个 JSON 格式。

截图如下。 The original web page and in the XHR the error is shown

我尝试将 JSON 响应传递给 https://jsonlint.com/ 并对其进行验证。它显示响应是正确的 JSON 格式。 我仍然无法弄清楚我在哪里犯了错误。我是 Node 的初学者,所以请帮我解决问题。

传递的示例输入是 2。节点以正确的名称“bbb”响应,并且 JSON 响应 {"id":"2","name":"bbb"} 登录到控制台。但是当传递到网页时会产生错误。

编辑:我尝试在 Chrome 上运行它,获得了预期的响应,并且 XHR 的响应选项卡显示了 JSON 数据,但执行了 ajax 调用中的错误方法。但是当我尝试在 Firefox 上运行它时,出现了这个错误。

【问题讨论】:

  • 您查看过浏览器控制台的“网络”标签吗?
  • @ScottSauyet 是的,我查看了浏览器控制台的网络选项卡。请检查我附上的第一个屏幕截图。它显示浏览器控制台。 i.stack.imgur.com/9Q0x2.jpg
  • 我没有做太多。很高兴你找到它。

标签: javascript jquery json node.js ajax


【解决方案1】:

我发现了错误。整个问题是由于跨域请求。问题是 “跨域请求被阻止:同源策略不允许读取远程资源原因:CORS 标头 'Access-Control-Allow-Origin' 缺少节点 js”,它显示在控制台选项卡中本身。最后添加了一段代码 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote ...............CORS header ‘Access-Control-Allow-Origin’ missing 回答我在服务器程序中的代码,现在它工作得很好..

谢谢你..

【讨论】:

  • 我正要发布一个关于此的问题,但被宠物分心了。祝你好运。
猜你喜欢
  • 2017-06-24
  • 2016-10-25
  • 2018-02-19
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多