这个问题是我尝试学习承诺和延期的一部分。假设您有一个提交POST
的按钮:
$("#submit").click( function() {
$.post({...})
})
我的理解是AJAX本身就是一个承诺(明显有意义),所以我想做的是,当用户点击#check
时,它会在完成后返回AJAX的输出(假设#check
只能在点击#submit
之后才能点击$("#check").click(function() {
$.when($.post({...})).done( function(data) {
console.log("data")
})
})
。
我认为这很简单,所以我的初始代码是:
POST
但是我意识到在这个实现中,AJAX在#check
被点击之前不会启动#submit
。不需要任何.post
按钮,并且#submit
中的AJAX .
是多余的。
有没有办法实现我使用promises / deferreds做的事情?
答案 0 :(得分:1)
只需存储post
返回的承诺。
var myPromise = null;
$("#submit").click( function() {
myPromise = $.post({...});
});
$("#check").click(function() {
if (myPromise) {
myPromise.then( function(data) {
console.log("data");
});
}
});
我做的其他更改是使用then()
而不是done()
(单个函数接受成功,失败或进度)并且我添加了语句结束分号(因为自动分号插入会杀死小狗)。
一旦你完成了承诺,就快速前进到observables。使用JavaScript,乐趣永远不会停止。
答案 1 :(得分:1)
基于对该问题的评论:
我想通过AJAX提交一些内容,但是当我点击按钮检查时我想要使用该AJAX的结果。
你可能过于复杂了。你真的不需要剖析AJAX请求/承诺/等。这两个按钮之间。只需在第一个按钮中发出请求并存储结果,然后在第二个按钮中使用结果。像这样简单:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery UI Slider - Range slider</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
<p>
<label for="amount">Price range:</label>
<input type="text" id="amount" readonly style="border:0; color:#f6931f; font-weight:bold;">
</p>
<div id="slider-range"></div>
</body>
</html>
基本上&#34;检查&#34;按钮与AJAX没有任何关系。它只是对存在于内存中的数据执行操作。成功获取数据后,只需启用该按钮。