javascript - 仅在单击按钮后运行 JavaScript/AJAX

标签 javascript jquery html ajax

现在,我的脚本在页面加载后立即执行,然后在单击按钮后再次执行。是否可以使脚本空闲/等待,直到我单击按钮,然后运行?据我了解,这段代码是异步的,这很好,但我不希望它在页面加载后立即运行。

我有一个简单的 HTML 按钮:

<button type="submit">Log in</button>

这是我的脚本:

var myButton = document.querySelector('button'); //I realize theres an easier jQuery for this
var token;

function getToken(){

        alert("get token");
        var settings = {
            "async": true,
            "crossDomain": true,
            "url": "...",
            "method": "POST",
            "headers": {
            "Content-Type": "application/json",
            "cache-control": "no-cache"
            },
            "processData": false,
            "data": "{  \r\n\"Username\":\"username123\",\r\n\"Password\":\"password123\"\r\n}"
        }           
        alert("going to ajax");
        return $.ajax(settings);                        
        }       

function handleData(data){

        console.log(data);          
        token = data.access_token;
        console.log(token);
    }

getToken().done(handleData);

myButton.onclick = function(e){         
            e.preventDefault();
            getToken();                     
    }

我已经实现了一些警报来可视化流程。事情是这样的:

  1. 加载页面
  2. 警报:“获取 token ”
  3. 警报:“即将使用 ajax”
  4. 控制台:数据和 token
  5. 出现按钮
  6. 我点击按钮
  7. 重复步骤 2-4

最佳答案

当页面加载时,您正在调用您的函数 getToken().done(handleData);。将其移至按钮单击事件处理程序中,而不是 getToken()

代码:

var myButton = document.querySelector('button'); //I realize theres an easier jQuery for this
var token;

function getToken(){

        alert("get token");
        var settings = {
            "async": true,
            "crossDomain": true,
            "url": "...",
            "method": "POST",
            "headers": {
            "Content-Type": "application/json",
            "cache-control": "no-cache"
            },
            "processData": false,
            "data": "{  \r\n\"Username\":\"username123\",\r\n\"Password\":\"password123\"\r\n}"
        }           
        alert("going to ajax");
        return $.ajax(settings);                        
        }       

function handleData(data){

        console.log(data);          
        token = data.access_token;
        console.log(token);
    }



myButton.onclick = function(e){         
            e.preventDefault(); 
            getToken().done(handleData);                    
    }

关于javascript - 仅在单击按钮后运行 JavaScript/AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55776250/

相关文章:

javascript - 仅当单击提交按钮时才将数据从多个复选框传递到 api :react js

javascript - 使用javascript检查DIV是否可见

javascript - 如何在 Chrome 扩展中动态加载大型 JSON 文件

javascript - 每次点击显示 10 个元素

jquery - 显示 :block kills my style

javascript - 实时搜索 Accordion 及其内容

javascript - 使用 jQuery 过滤标签

javascript - Angular 数据表 : How to retrieve selected row data for Editing/Delete

php - 从多个文本输入框复制到文本区域:

javascript - 如何在 Firefox 上分配空链接