function getResults(){
var text = encodeURIComponent(searchField.val().trim());
$.ajax({
type: "GET",
url: "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro&format=json&titles=" + text,
dataType: "jsonp",
success: function(data){
showResults(data, text);
}
});
}
function showResults(data, text) {
results.show();
var query = "https://en.wikipedia.org/wiki/" + text;
for (var id in data.query.pages) {
var code = "<a href=" + query + " class='results'>" + "<div class='results'>";
code = code + "<strong>" + id.title + "</strong>";
code = code + "<br>";
code = code + id.extract;
code = code + "</div></a>"
$(code).appendTo(results);
}
}
在showResults函数中,它将id.title和id.extract显示为undefined。这是为什么?我做错了什么?
答案 0 :(得分:2)
执行此操作时:
for (var id in data.query.pages)
id
变量填充了一个属性名称,它只是一个字符串。如果要获取该属性的值,则必须引用该属性的值,如:
data.query.pages[id]
或者,如果那是您想要.title
的对象,那么您需要
data.query.pages[id].title
和
data.query.pages[id].extract
答案 1 :(得分:1)
那是因为当迭代一个对象(使用for-var-in-object
循环)时,var
(在这种情况下为id
)是关键,但如果你需要价值,使用object[key]
语法。请检查以下代码
$.ajax({
type: "GET",
url: "https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro&format=json&titles=newton",
dataType: "jsonp",
success: function(data) {
for (var id in data.query.pages)
document.write(data.query.pages[id].title);
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 2 :(得分:1)
在您的情况下,您只使用key
=&gt; '321123'。获取对象使用的值key
。获取对象data.query.pages[id]
。
for (var id in wiki = data.query.pages){
wiki[id].title;
wiki[id].extract;
}
这个应该有效。
function showResults(data, text) {
results.show();
var query = "https://en.wikipedia.org/wiki/" + text;
for (var id in wiki = data.query.pages) {
var code = "<a href=" + query + " class='results'>" + "<div class='results'>";
code = code + "<strong>" + wiki[id].title + "</strong>";
code = code + "<br>";
code = code + wiki[id].extract;
code = code + "</div></a>"
$(code).appendTo(results);
}
}