GetJSON jquery returns 未定义
GetJSON jquery returns undefined
我正在尝试让我的搜索框正常工作,并对文本搜索和标题执行 getJSON。但在控制台日志中,我得到 text=undefined?title=undefined。所以它没有显示任何 JSON。不确定我的点击是否正常,或者我是否必须让我的 JSON objects?
脚本
<script>
var searchstring = $('input[type="text"]', this).val();
var url = "https://data.edu/api/v1/metadata";
url += "?text=" + searchstring;
url += "?title=" + searchstring;
$(document).ready(function() {
$('button[type="button"]').click(function(event){
$.ajax({
type: "GET",
url: url,
success: function(res){
console.log(res);
var items = res.data.metadata;
var ins = "";
for (var i = 0; i < items.length; i++){
ins += "<div>";
ins += "Title" + items[i].title;
ins += "Title" + items[i].title;
ins += "Title" + items[i].title;
ins += "</div><br />";
};
$('#results').html(ins);
}
});
});
});
</script>
html
<form class="destinations-form" role="search" >
<div class="input-line">
<input id="searchForm" type="text" class="form-input check-value" placeholder="Search Documents" />
<button type="button" class="form-submit btn btn-special" "</button>
</div>
</form>
<div class="container">
<div class="hero-text align-center">
<div id="results"></div>
</div>
</div>
json
data: [
{
collection_id: "ADGM-1552427432270-483",
metadata:{
year: "2019",
files: text ,
title: text,
},
问题是因为您仅在页面首次加载时才从该字段中读取值,并且它是空的。要解决此问题,请将该逻辑移入 click
处理程序。
下一个问题是您应该从 $('input[type="text"]', this)
中删除 this
。您在这里不需要上下文选择器,无论如何这个选择器都是不正确的。
另请注意,有效的查询字符串以 ?
开头并用 &
分隔每个值,因此您的 url
连接需要稍微修改。此外,您不应在每次点击时更新 url
值。如果您这样做,您的 AJAX 请求将只工作一次。
最后,您回复中的 metadata
是一个对象,而不是数组。 data
是数组,所以你需要循环遍历它。使用 map()
也可以简化循环。试试这个:
$(document).ready(function() {
const url = "https://data.edu/api/v1/metadata";
$('button[type="button"]').on('click', function(e) {
let searchstring = $('input[type="text"]').val();
let requestUrl = url + `?text=${searchstring}&title=${searchstring}`;
$.ajax({
type: 'GET',
url: requestUrl,
success: function(res) {
let html = res.data.map(item => `<div>Title ${item.metadata.title}</div><br />`);
$('#results').html(html);
}
});
});
});
我正在尝试让我的搜索框正常工作,并对文本搜索和标题执行 getJSON。但在控制台日志中,我得到 text=undefined?title=undefined。所以它没有显示任何 JSON。不确定我的点击是否正常,或者我是否必须让我的 JSON objects?
脚本
<script>
var searchstring = $('input[type="text"]', this).val();
var url = "https://data.edu/api/v1/metadata";
url += "?text=" + searchstring;
url += "?title=" + searchstring;
$(document).ready(function() {
$('button[type="button"]').click(function(event){
$.ajax({
type: "GET",
url: url,
success: function(res){
console.log(res);
var items = res.data.metadata;
var ins = "";
for (var i = 0; i < items.length; i++){
ins += "<div>";
ins += "Title" + items[i].title;
ins += "Title" + items[i].title;
ins += "Title" + items[i].title;
ins += "</div><br />";
};
$('#results').html(ins);
}
});
});
});
</script>
html
<form class="destinations-form" role="search" >
<div class="input-line">
<input id="searchForm" type="text" class="form-input check-value" placeholder="Search Documents" />
<button type="button" class="form-submit btn btn-special" "</button>
</div>
</form>
<div class="container">
<div class="hero-text align-center">
<div id="results"></div>
</div>
</div>
json
data: [
{
collection_id: "ADGM-1552427432270-483",
metadata:{
year: "2019",
files: text ,
title: text,
},
问题是因为您仅在页面首次加载时才从该字段中读取值,并且它是空的。要解决此问题,请将该逻辑移入 click
处理程序。
下一个问题是您应该从 $('input[type="text"]', this)
中删除 this
。您在这里不需要上下文选择器,无论如何这个选择器都是不正确的。
另请注意,有效的查询字符串以 ?
开头并用 &
分隔每个值,因此您的 url
连接需要稍微修改。此外,您不应在每次点击时更新 url
值。如果您这样做,您的 AJAX 请求将只工作一次。
最后,您回复中的 metadata
是一个对象,而不是数组。 data
是数组,所以你需要循环遍历它。使用 map()
也可以简化循环。试试这个:
$(document).ready(function() {
const url = "https://data.edu/api/v1/metadata";
$('button[type="button"]').on('click', function(e) {
let searchstring = $('input[type="text"]').val();
let requestUrl = url + `?text=${searchstring}&title=${searchstring}`;
$.ajax({
type: 'GET',
url: requestUrl,
success: function(res) {
let html = res.data.map(item => `<div>Title ${item.metadata.title}</div><br />`);
$('#results').html(html);
}
});
});
});