$.getJSON 请求在按钮单击时不起作用

Posted

技术标签:

【中文标题】$.getJSON 请求在按钮单击时不起作用【英文标题】:$.getJSON request does not work on button click 【发布时间】:2017-10-13 22:01:03 【问题描述】:

我试图找到解决这个问题的方法,我目前不知所措。我正在尝试使用 twitch API 收集有关流的信息。

当我传入一个用户名数组时,我能够让 .getJSON 请求工作,如果用户离线或无效,则返回 null。

$(document).ready(function() 
  var streamers = ["ESL_SC2","OgamingSC2","cretetion","freecodecamp","storbeck","habathcx","RobotCaleb","noobs2ninjas","meteos","c9sneaky","JoshOG"];
  var url = "https://api.twitch.tv/kraken/streams/";
  var cb = "?client_id=5j0r5b7qb7kro03fvka3o8kbq262wwm&callback=?";

  getInitialStreams(streamers, url, cb); //load hard-coded streams
);

function getInitialStreams(streamers, url, cb) 
  //loop through the streamers array to add the initial streams
  for (var i = 0; i < streamers.length; i++) 
    (function(i) 
      $.getJSON(url + streamers[i] + cb, function(data) 
        //If data is returned, the streamer is online
        if (data.stream != null) 
          console.log("online");
         else 
          console.log("offline");
        
      );
    )(i);
  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="form-inline">
      <input id="addStreamerForm" class="form-control" type="text" placeholder="Add a Streamer">
      <button id="addStreamerBtn" class="btn" type="submit">Add</button>
</form>

但是,当我尝试通过单击函数调用 API(最终通过表单提取任何输入)时,.getJSON 失败。如下所示。

$(document).ready(function() 
  var url = "https://api.twitch.tv/kraken/streams/";
  var cb = "?client_id=5j0r5b7qb7kro03fvka3o8kbq262wwm&callback=?";

  $("#addStreamerBtn").click(function(e) 
    addStreamer("Ben", url, cb);
  );
);

function addStreamer(streamer, url, cb) 
  console.log("I'm inside the function");
  $.getJSON(url + streamer + cb, function(data) 
    console.log("WE DID IT");
  );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="form-inline">
  <input id="addStreamerForm" class="form-control" type="text" placeholder="Add a Streamer">
  <button id="addStreamerBtn" class="btn" type="submit">Add</button>
</form>

我不明白为什么该代码不适用于第二个 sn-p。任何指导将不胜感激。

【问题讨论】:

【参考方案1】:

问题是因为您已经挂钩到提交按钮的click 事件。这意味着 form 在您的 AJAX 请求发生时被提交,因此页面会立即卸载并取消 AJAX。

要解决此问题,请挂钩到 formsubmit 事件,并在该事件上调用 preventDefault()。试试这个:

$(document).ready(function() 
  var url = "https://api.twitch.tv/kraken/streams/";
  var cb = "?client_id=5j0r5b7qb7kro03fvka3o8kbq262wwm&callback=?";

  $(".form-inline").submit(function(e) 
    e.preventDefault();
    addStreamer("Ben", url, cb);
  );
);

function addStreamer(streamer, url, cb) 
  console.log("I'm inside the function");
  $.getJSON(url + streamer + cb, function(data) 
    console.log("WE DID IT");
  );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="form-inline">
  <input id="addStreamerForm" class="form-control" type="text" placeholder="Add a Streamer">
  <button id="addStreamerBtn" class="btn" type="submit">Add</button>
</form>

【讨论】:

以上是关于$.getJSON 请求在按钮单击时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

导航栏按钮在 Shiny 中单击时不起作用

带有 jQ​​uery UI 对话框、拼写检查和按钮在第二次单击时不起作用的 CKEditor

Jquery .animate() 在我第二次触发它时不起作用

JQuery getJson 成功函数在按钮单击时触发

React setState 在第一次尝试时不起作用,但在第二次尝试时起作用?

UIButton 在第一次运行时工作正常,但在模拟器上第二次运行时不起作用