【问题标题】:AJAX response error: net::ERR_EMPTY_RESPONSEAJAX 响应错误:net::ERR_EMPTY_RESPONSE
【发布时间】:2017-05-26 21:59:50
【问题描述】:

代码:

前端

$(document).ready(function(){
        $('.delete-post').on('click', function(){
            var id = $(this).data('id');
            var section = $(this).data('section');
            var url = '/users/delete/'+id;
            if(confirm("Delete Post ?")){
                $.ajax({
                    url: url,
                    type:'DELETE',
                    success: function(result){
                        console.log('Deleting post...');
                        window.location.href='/users/profile';
                    },
                    error: function(err){
                        console.log(err);
                    }
                });
            }
        });
    });

后端:

router.delete('/delete/:id', function(req, res, next) {

    var id = req.params.id;
    var section = req.params.section;

    var image = "";
    var author = "";

    var postRef = firebase.database().ref("posts/"+section+"/"+id);
    var userRef = firebase.database().ref("users/posts/"+id);
    var likesRef = firebase.database().ref("users/likes/"+id);
    var hotRef = firebase.database().ref("hot/"+section+"/"+id);

    postRef.once('value', function(snapshot){
        image = snapshot.image;
        author = snapshot.author;

        if (firebase.auth().currentUser.uid.toString() == author) {
            var file = bucket.file(image);

            file.delete(function (err, apiResponse) {
                  if (err) {
                    console.log(err);
                  }
                  else {
                    console.log("Deleted successfully");

                    postRef.remove();
                    userRef.remove();
                    hotRef.remove();
                    likesRef.remove();

                    req.flash('success_msg','Post Deleted');
                    res.send(200);
                  }
            });
        }    
    });
});

情况:

我添加了删除按钮,以便用户可以删除他的帖子。

当用户单击按钮时,会向我的 Node.js 服务器发出 AJAX 请求。

但我收到以下错误:


错误:

net::ERR_EMPTY_RESPONSE

问题:

这是什么错误,我该如何解决?

【问题讨论】:

  • 该错误与您提供的代码无关。
  • @KevinB 我更新了我的问题。
  • 您确定当您未能调用 res.send 时,其他地方的其他东西正在发送响应吗?目前,如果出现错误或未调用回调,您的请求将不会结束...
  • @Kevin 你是说我需要在 if 语句中为错误情况添加一个 res.send(200) 吗?
  • 也许不是 200,但是总是以一种或另一种方式回应并不是一个坏主意。

标签: javascript jquery ajax node.js firebase


【解决方案1】:

您得到的响应实际上是正确。根据docs,Firebase 返回 200 状态代码和空响应net::ERR_EMPTY_RESPONSE 就是这样。您应该做的是检查响应中的null200 状态码;如果为真,您可以放心地假设该帖子已被删除。

我个人的意见是,Firebase 确实应该考虑返回比 nothing 更重要的内容和通用的、包罗万象的状态代码。我更喜欢 204 No Content 或 410 Gone 之类的东西。但是,唉。

旁注:如果帖子不属于作者,此条件将永远不会返回任何内容 — 即使您的条件不属于,您的 API 仍应返回 something(在这种情况下可能是错误)不匹配。喜欢:

if (firebase.auth().currentUser.uid.toString() == author) { 
    // your code
} else {
    res.status(401).send("User does not have permission to complete the operation.")
}

【讨论】:

  • 就是这样。让我试着解决这个问题并回复你。
  • 好的,我调试好了。问题是在 req.params.section 中传递时该部分为空
  • 显然,我在 JQuery 中传递错误。你知道如何解决它吗?
  • 呃,如果您正在调试并且部分为空,请找出原因?要么您没有向其发送值,要么表单有错误?
  • 好吧,我想你会通过检查我的 Jquery 知道,因此可以做出一个完整的答案来分析问题并解决它:) Nervemind。我明天会这样做。除非有人同时提供解决方案,否则我会接受您的回答。祝你有美好的一天^^
猜你喜欢
  • 1970-01-01
  • 2021-06-30
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多