【发布时间】: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