一个按钮提交AJAX,另一个按钮查询该AJAX的结果

时间:2017-02-20 22:14:27

标签: javascript jquery ajax promise jquery-deferred

这个问题是我尝试学习承诺和延期的一部分。假设您有一个提交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做的事情?

2 个答案:

答案 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没有任何关系。它只是对存在于内存中的数据执行操作。成功获取数据后,只需启用该按钮。