我試圖理解爲什麼.getJSON()調用拋出表單提交時不會抑制錯誤。最初我以爲可能表單提交意味着函數wikiCall()沒有被啓動。但是,當在提交表單時輸入正確的「wikiLink」[wikiCall()的參數],但這會導致.getJSON()失敗。需要幫助理解.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中的任何內容都將丟失,並且要重新加載頁面。 – adeneo
[用戶單擊刷新時處理ajax錯誤]的可能重複(http://stackoverflow.com/questions/699941/handle-ajax-error-when-a-user-clicks-refresh) – showdev
在此處可以正常工作http:///jsfiddle.net/oyu0qzmb/應該爲每個新請求清空容器,儘管 – charlietfl