【问题标题】:Calling APIs with JSON [duplicate]使用 JSON 调用 API [重复]
【发布时间】:2017-05-14 04:44:29
【问题描述】:

我正在尝试学习如何使用 JQuery 调用 API。我创建了一个小函数来更改 div 内的文本 (class="quote-box")。该功能似乎在大多数情况下都可以正常工作。单击#newQuote 按钮将div 中的文本更改为Didn't work

但是,中间的.getJSON 什么都不做。我希望这段代码将文本更改为“Yay.”,但它拒绝在 function(json){ } 块内执行任何操作。

--删除旧代码--

任何帮助将不胜感激。

编辑: 这似乎不是上述问题的重复,因为即使在删除所有变量后该函数仍会失败。

  $("#newQuote").on("click", function(){

       $.getJSON("http://api.forismatic.com/api/1.0/?method=getQuote&lang=en&format=json", function(json){
         $(".quote-box").html("Yay");
       }); 
 });

编辑 2: 解决了。 forismic API 不喜欢 https。切换到正常的 http 使一切正常。

【问题讨论】:

  • 您需要使用 $.ajax() 进行调用以使其同步,使用 async:false 代码如 $.ajax({ url: myUrl, dataType: 'json', async: false, data: myData, success: function(data) { //stuff //... } });
  • @Curiousdev 这是你能提出的最糟糕的建议。绝对不要这样做。它会在您等待网络呼叫时挂断浏览器。不要这样做,并撤消你已经这样做的任何代码。
  • @Brad ohh 真的可能是对的,你为什么不要求 jQuery 创建者删除它,因为它是不必要的添加,而且它最糟糕而且没用,但是包括 stackverflow 在内的互联网上的许多帖子和博客都在暗示使用这个可能都是错的..感谢您建议我今天学到了一个新东西..如果他们添加了这个异步函数,我有一个小问题是在任何情况下我都可以使用它吗?如果我必须做某些需要等到我的回复到来的任务怎么办。是的,我知道它会一直拖着我直到我的网络呼叫完成谢谢:)
  • @Curiousdev 之所以存在,是因为浏览器的 XHR 支持它。如果您使用它并检查您的开发控制台,您会看到有关它的警告。 jQuery 文档中也有警告。使用同步模式从来没有很好的理由。您始终可以在响应后运行您的代码。如果流控制难以处理,请查看已经内置在 jQuery 的 AJAX 响应中的 Promise。

标签: javascript jquery json api


【解决方案1】:

因为 getJSON 是一个异步调用,这意味着之后您的代码不会等待 getJSON 完成以继续。

所以要解决这个问题,请在 getJSON 中添加 $(".quote-box").html(outputString);

 $.getJSON("http://api.forismatic.com/api/1.0/?method=getQuote&lang=en&format=json", function(jsonp){
    outputString = "Yay."; 
    // Select the quote box, change the html. No problem here.
    $(".quote-box").html(outputString);
 }); 

【讨论】:

  • 这个我真的试过了,我又试了一次。恐怕还是没有运气。 (从好的方面来说,我了解了什么是异步调用!)
  • @garroad_ran 这个代码很好。您将不得不找出正确的选择器。此外,如果您要放入文本而不是 HTML,请务必使用 .text(),以确保正确转义文本。
  • 嗯,对不起,我似乎不太明白这一点。你是指我的 .quote-box 选择器,还是别的什么?我也会记住 .text() 的事情。
猜你喜欢
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多