【发布时间】:2016-04-28 07:26:14
【问题描述】:
我试图理解为什么 .getJSON() 调用在表单提交未被抑制时会引发错误。最初我认为表单提交可能意味着函数 wikiCall() 没有被启动。然而,正确的“wikiLink”[wikiCall() 的参数] 会在输入时提交表单时打印在控制台中,但这会导致 .getJSON() 失败。
HTML
<div class="text-center searchBar">
<form action="">
<input type="text" id="searchText" />
</form>
</div>
<div class="container displayResults"> </div>
Javascript:
$(document).ready(function() {
$('#searchText').keypress(function(e) {
var searchItem = $('#searchText').val();
var link = 'https://en.wikipedia.org/w/api.php?action=query&prop=extracts|info&exintro&exlimit=max&inprop=url&generator=search&gsroffset=&format=json&formatversion=2&callback=?&gsrsearch=' + searchItem;
if(e.which == 13) { //if user returns enter key
wikiCall(link);
//e.preventDefault(); //.getJSON throws error if form submission is not suppressed
}
});
});
function wikiCall(wikiLink) {
console.log(wikiLink); //prints the correct link even on form submit
$.getJSON(wikiLink, function(searchResults) {
for (var i = 0; i < searchResults.query.pages.length; i++) {
$(".displayResults").append("<div class='searchResultsContainer'><span style='font-weight:bold; font-size:150%; margin-bottom:100px;'>" + searchResults.query.pages[i].title + "</span><br></br>" + searchResults.query.pages[i].extract + "</div>");
$(".displayResults").append("<br>");
}
}).fail(function(jqxhr,textStatus,error){
alert(textStatus+": "+error); //shows error:error if form is submitted on enter
});
}
【问题讨论】:
-
好吧,如果提交表单,页面会重新加载,并且 ajax 调用可能会成功,但是当页面重新加载时,附加到 DOM 中的任何内容都将丢失,并且再次明确,页面重新加载.
-
在这里工作正常jsfiddle.net/oyu0qzmb 应该为每个新请求清空容器
-
问题中的代码应该是您实际询问的代码。您发布的代码确实禁止提交表单。
-
如果你检查你的网络标签,你可以看到请求被中止,这是预期的行为
标签: javascript jquery html api getjson