【问题标题】:Simple AJAX Get request is "pending"简单的 AJAX Get 请求处于“待处理”状态
【发布时间】:2013-04-23 11:54:46
【问题描述】:

我正在尝试实现一个简单的 AJAX GET 请求。此请求告诉服务器删除数据库中的文档。当我从服务器确认文档已被删除时,Chrome Inspector 显示该请求处于“待处理”状态,最终导致服务器错误。

我做错了什么?

HTML

<div class="delete-note">
    <a href="#"><i class="icon-minus-sign"></i></a>
</div>

JS

$('.delete-note').click(function(e) {
  var url = '/docs/' + doc_id + '/note_destroy/' + note_id;
  $.ajax({
    type: "GET",
    url: url,
    cache: false,
  });
  e.preventDefault();
});

编辑:也包括服务器端代码:

节点/Express

exports.note_destroy = function(req, res) {
  Doc.findOne({ doc_id : req.params.doc_id }, function(err, data) {
    if (err) throw (err);
    note_id = req.params.note_id;
    data.notes.id(note_id).remove();
    data.save(function(err) {
      if (err) throw (err);
      console.log('note ' + note_id + 'is removed.');
    });
  });
};

【问题讨论】:

  • 这很挑剔,但如果请求删除某些内容,POST 或 DELETE 请求会比 GET 更合适。
  • 我猜问题出在服务器端,请求没有被关闭等等?
  • @SamithaHewawasam 我想你可以。它只会应用于按钮单击并阻止它执行其默认操作(无论可能是什么)。它不应该对 ajax 调用有任何影响。
  • 您没有在服务器端代码中向客户端发送任何响应。浏览器显示请求未决,因为它一直在等待响应。
  • 为了稍微扩展@gbtimmon 所说的内容,here 是一个请求方法列表,并简要定义了每种方法何时适用于规范。如需完整的 w3 规范,请访问 this 页面。

标签: ajax node.js jquery express


【解决方案1】:

您的服务器端函数不会写入任何响应,因此浏览器会无限期地等待它。尝试编写响应,可能带有客户端可以检查的某种状态代码以判断删除是否有效。比如……

res.writeHead(200, { 'Content-Type': 'application/json' });
res.write(JSON.stringify({ status: OK }));
res.end();

【讨论】:

  • 完美,正是我想要的。我正在异步调用一个网页,该网页关闭并进行了一些冗长的处理,因此被卡在“待处理”状态。现在,我让网页写一些东西来响应(包括 Response.End()),并启动一个后台线程来完成耗时的工作。不再有“待处理”网页问题!
猜你喜欢
  • 2019-11-09
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 2015-08-30
  • 2014-06-21
  • 2018-03-31
相关资源
最近更新 更多