[Js++开发历程] Jquery的$.ajax().done().fail()之不可能的事情

1.9 Jquery的$.ajax().done().fail()之不可能的事情

 

  Jquery的开发人员的确让人折服,当我看到以上的代码时,感觉非常疑惑。 所有的ajax代码都在ajax函数中运行,为什么done和fail的中的函数能被回调呢?

  很多人会认为Jquery的Deferred的效果,其实不然,因为ajax如果采用同步模式的,就会等待执行结果,根本等不了执行done函数注入。其实最为奥秘之处在于$.Callbacks的运行机制

  $.Callbacks如果memory时,会记录上一次运行的结果。

* memory: will keep track of previous values and will call any callback added

* after the list has been fired right away with the latest "memorized"

* values (like a Deferred)

 

所以ajax的执行结果会存储在 memory中,当调用done()注册回调函数,会立即执行此回调函数,并传入memory存储的数据。

 

### jQuery 中 `$.ajax` 和 `.done()` 方法详解 #### 什么是 `$.ajax` `$.ajax` 是 jQuery 提供的一个用于发起 AJAX 请求的核心方法。它允许开发者通过 JavaScript 同步或异步地与服务器交互,而无需刷新整个页面[^1]。 #### `.done()` 方法的作用 `.done()` 是 jQuery 的 Deferred 对象的一部分,表示当 AJAX 请求成功完成时执行回调函数的操作。它是基于 Promise 模式的实现之一,通常用来处理成功的响应数据[^2]。 以下是其基本语法: ```javascript $.ajax({ url: 'example.com/api', method: 'GET' }).done(function(response) { console.log('请求成功:', response); }); ``` 在这个例子中,AJAX 请求发送到指定 URL (`example.com/api`) 并采用 GET 方法获取资源。一旦请求成功返回结果,则会触发 `.done()` 回调函数并打印接收到的数据至控制台[^3]。 #### 错误处理机制 虽然 `.done()` 只负责处理成功的场景,但实际开发过程中还需要考虑失败的情况。可以配合使用 `.fail()` 来捕获错误信息: ```javascript $.ajax({ url: 'https://api.example.com/data', type: 'POST', data: JSON.stringify({ key: value }), contentType: 'application/json; charset=utf-8' }) .done(function(data, textStatus, jqXHR){ console.log("Success:", data); }) .fail(function(jqXHR, textStatus, errorThrown){ console.error("Error occurred", textStatus, errorThrown); }); ``` 这里展示了如何设置 POST 类型的请求以及传递 JSON 数据给服务器端接口的同时也定义了两个同的事件处理器分别应对正常回应和异常状况下的行为模式[^4]。 #### 链式调用特性 由于支持链式操作,多个 `.done()`, `.fail()`, 或者其他相关的方法能够被连续附加在同一对象实例上形成更复杂的逻辑流控结构而破坏原有代码可读性和维护便利度[^5]: ```javascript let request = $.ajax({ url: '/some/url', dataType: 'json' }); request.done(showData).fail(handleErrors); function showData(data){ alert(`Received ${data.length} items`); } function handleErrors(xhr,status,errorThrown){ alert(`An error occurred: ${errorThrown}`); } ``` 此片段演示了一个简单的分离职责设计原则应用案例——把具体业务功能封装成独立的小单元再组合起来构建完整的应用程序流程图样貌[^6]。 #### 性能优化建议 为了提高性能表现,在生产环境中应该注意以下几点事项: - 缓存静态文件减少重复加载时间消耗; - 设置合理的超时时限避免长时间等待无果浪费计算资源; - 利用 Gzip 压缩传输大体积文本资料降低网络带宽占用率等等[^7]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值