Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在$.ajax之后从未调用过Done函数_Javascript_Jquery_Node.js_Ajax - Fatal编程技术网

Javascript 在$.ajax之后从未调用过Done函数

Javascript 在$.ajax之后从未调用过Done函数,javascript,jquery,node.js,ajax,Javascript,Jquery,Node.js,Ajax,我对所有这些都有点陌生,包括Javascript回调和ES6。我正在使用NodeJS+Express+MongoDB 我正在调用一个Ajax函数来更新一个项目,而成功的Ajax调用从未完成 这是我从React调用的Ajax调用 editBug : function(bug){ console.log('about to edit bug with these values',bug); $.ajax({ url:'/api/bugs', meth

我对所有这些都有点陌生,包括Javascript回调和ES6。我正在使用NodeJS+Express+MongoDB

我正在调用一个Ajax函数来更新一个项目,而成功的Ajax调用从未完成

这是我从React调用的Ajax调用

editBug : function(bug){

    console.log('about to edit bug with these values',bug);
    $.ajax({
        url:'/api/bugs',
        method: 'PUT',
        data:bug
    })
    .done((jqxhr) => {
        console.log('succcess while editing the bug');
        this.setState({successVisible : true});
    })
    .fail((jqxhr) => {
        console.log('error : ' + jqxhr);
    })  
},
下面是我的API函数:

app.put('/api/bugs',function(req,res){

    //console.log('req',req);
    console.log('query string : ',req.query);
    console.log('query params : ',req.params);
    console.log('query body: ',req.body);
    let id = new ObjectID(req.body._id);
    req.body._id = new ObjectID(req.body._id);

    db.collection('bugs').replaceOne(
        {_id:id},
        req.body,
        function(err,result){
            assert.equal(err,null);
            console.log('Successfull replace!');
            res.status(200);
        }
    );
});
成功的更换!日志正确显示在服务器端。
正面正确显示了即将使用这些值编辑的bug。但是编辑错误日志的成功过程并没有显示在前端,而且似乎是这样。done调用永远不会执行。

您不需要在Node.js端结束响应对象吗? 尝试添加res.end;或者对响应对象的任何类型的响应


此外,您还可以使用chrome或任何其他浏览器的“网络”选项卡来实际查看AJAX请求的最终结果,看看它们是挂起还是结束。

您不需要在Node.js端结束响应对象吗? 尝试添加res.end;或者对响应对象的任何类型的响应


此外,您还可以使用chrome或任何其他浏览器的“网络”选项卡来实际查看AJAX请求的最终结果,查看它们是否挂起或结束。

问题在于您没有在节点端向浏览器发送任何响应。试试下面的代码片段,你就可以开始了

另外,我想指出,您应该处理错误。如果出现问题,在更新bug时,最好的做法是用500状态代码通知浏览器,指示预期操作失败。我在下面的截图中添加了这一方面

app.put('/api/bugs', function(req, res) {

  //console.log('req',req);
  console.log('query string : ', req.query);
  console.log('query params : ', req.params);
  console.log('query body: ', req.body);
  let id = new ObjectID(req.body._id);
  req.body._id = new ObjectID(req.body._id);

  db.collection('bugs').replaceOne({
      _id: id
    },
    req.body,
    function(err, result) {
      if (err) {
        console.log('Failed replace');
        res.status(500).end(); // <- We set the response status code and end the request
      } else {
        assert.equal(err, null);
        console.log('Successfull replace!');
        res.status(200).end(); // <- We set the response status code and end the request
      }
    }
  );
});

问题是您没有将任何响应发送回节点端的浏览器。试试下面的代码片段,你就可以开始了

另外,我想指出,您应该处理错误。如果出现问题,在更新bug时,最好的做法是用500状态代码通知浏览器,指示预期操作失败。我在下面的截图中添加了这一方面

app.put('/api/bugs', function(req, res) {

  //console.log('req',req);
  console.log('query string : ', req.query);
  console.log('query params : ', req.params);
  console.log('query body: ', req.body);
  let id = new ObjectID(req.body._id);
  req.body._id = new ObjectID(req.body._id);

  db.collection('bugs').replaceOne({
      _id: id
    },
    req.body,
    function(err, result) {
      if (err) {
        console.log('Failed replace');
        res.status(500).end(); // <- We set the response status code and end the request
      } else {
        assert.equal(err, null);
        console.log('Successfull replace!');
        res.status(200).end(); // <- We set the response status code and end the request
      }
    }
  );
});

您没有提到是否调用了fail。您使用的是哪个版本的jquery?承诺添加到jQuery1上。6@freedomn-m fail未被调用。@guyfawkes jquery 3.1.1您没有提到是否调用了fail。您使用的是什么版本的jquery?承诺添加到jQuery1上。6@freedomn-m fail未被调用。@GYFAWKES jquery 3.1.1 Wesome!成功了。我认为你的答案是正确的,因为它比另一个更详细,也是正确的。非常感谢您的快速帮助!以及关于处理错误的部分。事实上,我正在遵循一个教程,这就是为什么我只做“快速”的东西。但你完全正确,太棒了!成功了。我认为你的答案是正确的,因为它比另一个更详细,也是正确的。非常感谢您的快速帮助!以及关于处理错误的部分。事实上,我正在遵循一个教程,这就是为什么我只做“快速”的东西。但你完全正确,谢谢。res.end确实有效!我没有想到这一点,因为在我使用res.jsondoc之前,它似乎也可以关闭流。谢谢。res.end确实有效!我没有想到这一点,因为在我使用res.jsondoc之前,它似乎也可以关闭流。