我对 PHP 很熟悉,但我需要学习 Node.js 才能使我的聊天应用程序更加高效。我是 Node.js 的初学者,目前遇到以下问题。
我想要做的是使用jquery从ajax向node.js发送请求并获得响应
我可以使用 php 轻松完成此操作,但 node.js 给我错误。这是到目前为止我的代码...
HTML 的一部分
$(document).on("click", "#nodesess", function () {
$.ajax({
type: "POST",
url: "http://localhost:3000/",
success: function(data) {
alert('Success!')
},
error: function() {
alert('error')
}
});
});
在服务器端
var express = require ('express');
var app= express();
app.get ('/', function(req,res){
res.send('Hello Express');
console.log("got get");
});
app.post ('/', function(req,res){
res.send('Hello Express post');
console.log("got post");
});
var server = app.listen(3000, function(){
console.log('listening on port 3000');
});
我同时拥有 post 和 get,因为我正在测试两者。此外,在cmd上我能够看到“got post”或“got get”,我只是无法将文本返回到ajax。我是否需要添加 Content-Type 或者我做错了整个事情?在 php 中,我会 POST 到 php 文件,在那里我只需要回显。我回显的内容将被发送回 ajax....我在想 res.send 将与 echo 相同...请帮助
我认为我提到的很重要,html 文件和 node.js 文件不在同一目录中。 Html 实际上位于 xampp 文件夹中,而 Node 位于另一个目录中...是否可以这样做?
最佳答案
-我将数据类型更改为脚本,如 @gizzlyPeakSoftware 评论的那样。起初似乎工作正常,因为它发出“成功!”的警报。但是,当将alert('Success!')更改为alert(data)时,它会发出未定义的警报。
-我做了更多研究,发现问题的发生是因为我正在执行跨域请求,因为 Apache(xampp) 和 node.js 使用不同的端口。因此,我的 jQuery ajax 调用 get/post 默默地失败了。
-为了解决跨域问题,我向 html 添加了回调和数据类型,如下所示...
$.ajax({
type: "get",
url: 'http://localhost:3000/',
dataType: "jsonp",
jsonpCallback: "_callback",
success: function(data) {
//alert('Success!');
alert(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error ' + textStatus + " " + errorThrown);
}
});
我还更改了我的node.js 文件以反射(reflect)回调更改
var express = require ('express');
var app= express();
app.get ('/', function(req,res){
//res.send('Hello Express');
res.send('_callback(\'{"message": "Hello worldd!"}\')');
console.log("got get");
});
app.post ('/', function(req,res){
res.send('_callback(\'{"message": "Hello world!"}\')');
console.log("got post");
});
var server = app.listen(3000, function(){
console.log('listening on port 3000');
});
关于jquery - 如何从node.js-express获取响应返回ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37468755/