当前位置: 首页 > 面试题库 >

jQuery.ajax处理继续响应:“成功:”还是“ .done”?

松建本
2023-03-14
问题内容

我已经使用jQuery和AJAX几周了,并且在调用完成后,我看到了两种“继续”脚本的不同方式:success:.done

从jQuery文档的提要中,我们得到:

.done():说明:添加要解析Deferred对象时要调用的处理程序。

成功:(。ajax()选项):如果请求成功,则要调用的函数。

因此,在AJAX调用完成/解决之后,两者都要做一些事情。我可以随机使用其中之一吗?有什么区别?何时使用一种替代另一种?


问题答案:

success一直是jQuery中成功回调的传统名称,定义为ajax调用中的一个选项。但是,由于实现了$.Deferreds更复杂的回调,因此done是实现成功回调的首选方法,因为可以在any上调用它deferred

例如,成功:

$.ajax({
  url: '/',
  success: function(data) {}
});

例如,完成:

$.ajax({url: '/'}).done(function(data) {});

令人高兴的done是,$.ajax现在的返回值是一个可以绑定到应用程序其他任何地方的递延承诺。假设您要在几个不同的地方进行此ajax调用。而不是你的成功传递函数作为一个选项,以使这个Ajax调用的功能,你可以有函数返回$.ajax本身并绑定你的回调donefailthen,或什么的。请注意,always无论请求成功还是失败,该回调都会运行。done仅在成功时触发。

例如:

function xhr_get(url) {

  return $.ajax({
    url: url,
    type: 'get',
    dataType: 'json',
    beforeSend: showLoadingImgFn
  })
  .always(function() {
    // remove loading image maybe
  })
  .fail(function() {
    // handle request failures
  });

}

xhr_get('/index').done(function(data) {
  // do stuff with index data
});

xhr_get('/id').done(function(data) {
  // do stuff with id data
});

就可维护性而言,这样做的一个重要好处是,您已经将ajax机制包装在了特定于应用程序的功能中。如果您决定$.ajax将来需要以不同的方式进行操作,或者使用其他的ajax方法,或者退出jQuery,则只需更改xhr_get定义(确保返回一个promise或至少一个done方法),以上述示例为例)。整个应用程序中的所有其他参考都可以保持不变。

您可以执行更多(更酷)的操作$.Deferred,其中之一是pipe即使$.ajax请求本身成功,也可以触发服务器报告的错误失败。例如:

function xhr_get(url) {

  return $.ajax({
    url: url,
    type: 'get',
    dataType: 'json'
  })
  .pipe(function(data) {
    return data.responseCode != 200 ?
      $.Deferred().reject( data ) :
      data;
  })
  .fail(function(data) {
    if ( data.responseCode )
      console.log( data.responseCode );
  });
}

xhr_get('/index').done(function(data) {
  // will not run if json returned from ajax has responseCode other than 200
});
$.Deferred在此处了解更多信息: http
//api.jquery.com/category/deferred-
object/

注意 :从jQuery 1.8开始,pipe不赞成使用then以完全相同的方式使用。



 类似资料:
  • 问题内容: Flask中是否可以将响应发送给客户端,然后继续进行某些处理?我要完成一些簿记任务,但是我不想让客户等待。 请注意,这些实际上是我想做的非常快的事情,因此在这里实际上不适合创建新线程或使用队列。(这些快速的操作之一实际上是在作业队列中添加一些内容。) 问题答案: 可悲的是,将响应返回给客户端后,拆卸回调不执行: 卷曲时,您会注意到在显示响应之前有2s的延迟,而不是卷曲立即结束,然后在2

  • 使用OkHttp实现异步RESTAPI客户机,工作正常。出于好奇,尝试将其转换为WebClient,观察奇怪的行为。 WebClient配置就是这样: 请求代码: 在单元测试中,作为参数传递给此方法的回调完成了一个Future,我等待它。因此,当我在IDEA中运行测试时,请求产生一个响应,响应的正文为空(内容长度:0),subscribe()中的lambda永远不会执行-使用println调试进行

  • 我在我的项目中使用Spring集成,使用的模式是分散收集。这里正在执行三个并行过程。流2是一个出站网关方法,如果该服务关闭,那么我想处理Httpstatus异常并希望发送null。实际上,如果该服务关闭,那么整个流程就会停止。但我想处理那个异常并发送null,然后想继续使用聚合方法并结束流程。 以下是代码-- //配置文件 网关 我可以使用类似于?但是我该怎么用呢? 我正在做这样的事情,但得到如下

  • 有什么想法吗?没有JS库。 编辑:我做了几次回拨尝试。老实说,我很难理解他们。下面是我的最后一次尝试:

  • chatgpt 是如何实现“继续生成”功能的 我用 chatgpt 翻译文档,当内容过多的时候,chatgpt 一次无法全部返回,会出现“继续生成”按钮,点击后会接着上一句继续生成。我使用其他的大语言模型就没有这种功能,想知道他们是怎么实现的?

  • 授权服务器颁发访问令牌和可选的刷新令牌,通过向HTTP响应实体正文中添加下列参数并使用200(OK)状态码构造响应: access_token 必需的。授权服务器颁发的访问令牌。 token_type 必需的。如7.1节所述的颁发的令牌的类型。值是大小写不敏感的。 expires_in 推荐的。以秒为单位的访问令牌生命周期。例如,值“3600”表示访问令牌将在从生成响应时的1小时后到期。如果省略,