【发布时间】: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