Javascript React JS中的AJAX请求不';行不通

Javascript React JS中的AJAX请求不';行不通,javascript,ajax,node.js,reactjs,Javascript,Ajax,Node.js,Reactjs,我试图通过AJAX请求从数据库中获取信息,但未触发成功事件 但是,服务器会接收AJAX请求,因为它会触发终端中正确的控制台日志 我正在Node中使用Express框架构建它 下面是触发AJAX调用的代码。“componentDidMount触发器”记录到控制台。但后来它停止了。即使我知道服务器接收到AJAX请求,console.log“success”或“error”也不会被触发 app.get('/api/:name', function (req,res){ name = req.p

我试图通过AJAX请求从数据库中获取信息,但未触发成功事件

但是,服务器会接收AJAX请求,因为它会触发终端中正确的控制台日志

我正在Node中使用Express框架构建它

下面是触发AJAX调用的代码。“componentDidMount触发器”记录到控制台。但后来它停止了。即使我知道服务器接收到AJAX请求,console.log“success”或“error”也不会被触发

app.get('/api/:name', function (req,res){
    name = req.params.name;
    Member.findOne({username: name}, function(err,member){
        res.setHeader('Content-Type', 'application/json');
        res.write(member.toString());
        console.log('member fetched from DB: ', member);
        res.end();
    });
});
我也没有收到任何其他错误,所以我不知道为什么这不起作用

有人能帮忙吗

更新:谢谢你的帮助。我现在更近了一步。在处理AJAX请求时,我没有意识到我需要“res.end”。当我改变这一点时,我设法得到了一个响应,尽管这是一个错误

Her是服务器端代码:

app.get('/api/:name', function (req,res){
    name = req.params.name;
    Member.findOne({username: name}, function(err,member){
        res.setHeader('Content-Type', 'application/json');
        res.write(member.toString());
        console.log('member fetched from DB: ', member);
        res.end();
    });
});

与您的问题无关,但与找出原因同样重要。没有调用success:您的代码没有在success处理程序中调用Main的
setState
,因为success函数不是“在您的组件中”调用的,而是“由jQuery在某处”调用的

如果要在组件上调用
setState
,作为成功处理的一部分,请缓存该组件,然后在该组件上调用组件函数:

var self = this;
$.ajax({
  ...
  success: function() {
    self.setState({ ... });
  }
...
或者使用JavaScript
bind
函数(与jQuery.bind无关)显式地将success函数的执行上下文设置为您的组件:

...
success: function(data) {
  console.log('success')
  this.setState({data: data});
}.bind(this),
...

我的错误在res.write(member.toString())中。我不得不将其更改为res.write(JSON.stringify(member)),因为客户端请求一个JSON文件。

如果没有调用console.log,我会仔细检查控制台是否有错误,并检查网络选项卡以查看发送了什么响应。此外,您的
success
回调中的
this
也不正确。最简单的修复方法是捕获
this
var self=this$.ajax
之前使用code>,然后在闭包中使用
self
self.setState(
。如果您看到服务器接收到请求,您还可以说您正在使用服务器端,以及如何生成响应吗?开发工具中的“网络”选项卡在该请求发生时会说什么?它是否会说您正在起诉GET当您想要发布时(反之亦然),请求是否有效,但您从未得到回复(因为你的服务器可能忘了发送响应结束?)等等。对那些投反对票的人说:请记住,Stackoverflow上的有效响应“通常是有用的或有帮助的”回答,即使他们没有解决原始问题。最终只有真正的答案才会被接受,但这个答案太长,无法发表评论,而且肯定解决了原始问题的问题,即使海报没有注意到问题。在这种情况下,你不想
res.write(…)
总之,您需要
res.json(member)
(如果您使用的是express?),它接受一个对象并将其作为json序列化文本发送出去。谢谢,我不知道这个方法。工作非常完美!