简单的 AJAX Get 请求处于“待处理”状态

Posted

技术标签:

【中文标题】简单的 AJAX Get 请求处于“待处理”状态【英文标题】:Simple AJAX Get request is "pending" 【发布时间】: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 页面。 【参考方案1】:

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

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

【讨论】:

完美,正是我想要的。我正在异步调用一个网页,该网页关闭并进行了一些冗长的处理,因此被卡在“待处理”状态。现在,我让网页写一些东西来响应(包括 Response.End()),并启动一个后台线程来完成耗时的工作。不再有“待处理”网页问题!

以上是关于简单的 AJAX Get 请求处于“待处理”状态的主要内容,如果未能解决你的问题,请参考以下文章

HTTP OPTIONS 飞行前请求加载已取消,Chrome 中处于待处理状态

重新发送使用过期令牌发出的请求会导致开发人员工具处于待处理状态

我正在尝试复制 devconnector 项目,但是当我发出发布请求配置文件路由创建配置文件时,发布请求处于待处理状态

jQuery:我可以在较长的 $.ajax 请求待处理时发送和接收 $.ajax 响应吗?

Celery AsyncResult 始终处于待处理状态

为啥一个已解决的承诺仍处于待处理状态?