【发布时间】:2017-02-22 00:35:16
【问题描述】:
这个问题是我尝试学习 promises 和 deferreds 的一部分。假设您有一个提交POST 的按钮:
$("#submit").click( function() {
$.post({...})
})
我的理解是 AJAX 本身就是一个承诺(这很明显),所以我想做的是,当用户点击 #check 时,它会在完成后返回 AJAX 的输出(假设#check 只能在点击 #submit 之后才会被点击。
我认为这很简单,所以我的初始代码是:
$("#check").click(function() {
$.when($.post({...})).done( function(data) {
console.log("data")
})
})
但我意识到,在这个实现中,AJAX 不会启动 POSTing,直到点击 #check。不需要任何 #submit 按钮,在 #submit 中使用 AJAX .post 是多余的。
有没有办法使用 promises/deferreds 来实现我正在做的事情?
【问题讨论】:
-
目前还不清楚为什么需要两个按钮来执行一个 AJAX 请求。这似乎是一个等待发生的时间问题。为什么不直接将
.done()附加到初始 AJAX 调用并在此处指定您要对响应执行的操作? -
您也可以考虑阻止默认提交操作,否则您的页面可能会在执行任何“.done”之前消失
-
因为我只想在按下
#check后对响应采取行动......我该如何实现? -
就像一个 FYI James 一样,AJAX 不是一个承诺,它是一种异步发送和接收数据的机制。当然,可以说是通过包装它并返回对未来数据的承诺而不是使用传统的回调方法来改进它。
-
@rasmeister - jquery 长期以来一直从它的“ajax”系列函数中返回一个promise(排序,不是promise/A+ 规范,我称之为一个破碎的promise)——所以,不需要包装
标签: javascript jquery ajax promise jquery-deferred