gpt4 book ai didi

javascript - 来自 express js 的 Ajax 发布响应不断抛出错误

转载 作者:行者123 更新时间:2023-11-30 13:04:50 25 4
gpt4 key购买 nike

我真的很难忍受从 html 页面到我的 node.js 应用程序然后返回到 html 页面的双向数据传输。

我很确定我已经找到了正确的解决方案,但我就是没有让它发挥作用。

我正在为我的 node.js 应用程序使用以下内容:

var express = require('/usr/lib/node_modules/express');
var app = express();

app.use(function(err, req, res, next){
console.error(err.stack);
res.send(500, 'Something broke!');
});

app.use(express.bodyParser());

app.post('/namegame', function(req, res)
{
console.log('Got request name: ' + req.body.name);
setTimeout(function()
{
var newName = "New Name-O";
res.send({name: newName});
}, 2000);
}
);

app.listen(8088, function() { console.log("Server is up and running"); });

以下是我的html页面:

<html> 
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>

<script type="text/javascript">
// wait for the DOM to be loaded
$(document).ready(function()
{
alert("Got here!");

function DisplayName(response)
{
alert(response.newName);
}

$("#NameGameIt").click(function(event)
{
alert("How about now?");
//event.PreventDefault();
var nameSubmitted = document.getElementById("name");
//var nameSubmitted = "help!!";

alert("Name: " + nameSubmitted.value);

$.ajax({
type: "POST",
url: "http://127.0.0.1:8088/namegame",
data: {name: nameSubmitted.value},
dataType: "json",
timeout: 2500,
success: function() { alert("???");},
error: function(error1, error2, error3)
{ alert("error"); },
complete: function(arg1, arg2, arg3)
{ alert("complete"); }
});

});

});

</script>

</head>
<body>

<h1>Test form for Ajax</h1>
</br>

Name: <input type="text" id="name" name="name"></br>
<input type="button" value="NameGameIt" id="NameGameIt">
</form>

</body>
</html>

因此,当我运行 Node 应用程序时,服务器正常运行。当我启动 html 页面时,我收到警告“Got here!”当我按下按钮“NameGameIt”时,我收到警告“现在怎么样?”然后是警报“名称:”+我输入的任何名称。单击该警报后, Node 应用程序会立即看到该帖子并将名称打印到控制台。两秒钟后,当 Node 发送响应时,浏览器将直接进入 ajax post 上的错误处理程序。错误处理程序中出现的唯一有用数据是它是一个“错误”,实际上并没有用。

所以我知道消息从 html 页面到达 Node ,因为它打印出我发送的名称,我知道 html 页面从 Node 取回消息,因为它不会出错,直到超时在 Node 上发生触发发送。但是,我不知道为什么它一直将我发送到错误处理程序而不是成功。我已经使用 node-inspector 在 Node 代码中逐步完成,它似乎正在使用 200 代码正确构建数据包以获得成功,并且它在完成数据包后调用 .end inside .send 所以我不这样做认为这些事情中的任何一个都在困扰着我。

我要疯了!如果有人看到我遗漏了什么或对如何收集更多信息有任何新想法,我将非常感谢您的帮助。

最佳答案

您的代码完全没问题,但您几乎肯定会遇到跨域 AJAX 请求问题。您可能在本地文件系统上打开此 HTML 文件并以这种方式发出请求,这就是导致此问题的原因。

要修复它,请像这样添加 app.use(express.static('public'));:

var express = require('/usr/lib/node_modules/express');
var app = express();

app.use(function(err, req, res, next){
console.error(err.stack);
res.send(500, 'Something broke!');
});

app.use(express.bodyParser());
app.use(express.static('public'));

app.post('/namegame', function(req, res)
{
console.log('Got request name: ' + req.body.name);
setTimeout(function()
{
var newName = "New Name-O";
res.send({name: newName});
}, 2000);
}
);

app.listen(8088, function() { console.log("Server is up and running"); });

然后将您的 html 文件放在“公共(public)”文件夹中。启动服务器后,您可以访问 http://127.0.0.1:8088/file.html,您的代码将正常运行。

关于javascript - 来自 express js 的 Ajax 发布响应不断抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16070725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com