JS:实例化变量无法识别输入值
JS: Instantiated variable won't recognise input value
我正在从 class 实例化一个新变量。 class 有一个构造函数 city,然后通过 foursquare API 获取爵士乐俱乐部。
当我将城市名称硬编码到实例化的 class 中时,它工作正常。但是当我想给它提供一个动态值(我通过 DOM 从搜索栏中获取的查询)时,它不会识别城市。这是代码:
Class:
class Venues {
constructor(city) {
this.id = '...';
this.secret = '...';
this.city = city;
}
async getVenues() {
const response = await fetch(`https://api.foursquare.com/v2/venues/search?near=${this.city}&categoryId=4bf58dd8d48988d1e7931735&client_id=${this.id}&client_secret=${this.secret}&v=20190309`);
const venues = await response.json();
return venues;
}
}
const input = document.getElementById('search-input').value;
const button = document.getElementById('button');
const jazzClubs = new Venues(input);
button.addEventListener('click', (e) => {
e.preventDefault();
getJazzVenues();
})
function getJazzVenues() {
jazzClubs.getVenues()
.then(venues => {
console.log(venues);
})
.catch(err => {
console.log(err);
});
}
有人知道为什么 input
变量的值不能被新实例化的 jazzClubs 变量识别吗?
此外,如果您有关于如何更好或更整洁地构建此代码的提示,欢迎提出任何建议(class 定义已经在单独的文件中)。
非常感谢你们!
亚当
您需要确定,点击按钮后会触发以下语句。
const input = document.getElementById('search-input').value;
const jazzClubs = 新场地(输入);
您的代码看起来也太复杂了。使用 jquery 使用更简单的代码。
尝试这样的事情:
$(document).ready(function() {
$("#search-button").click(function() {
var searchval = $("#search-input").val();
var id = "xxx";
var secret = "yyy";
alert(searchval);
var url = "https://api.foursquare.com/v2/venues/search?near=" + searchval + "&categoryId=4bf58dd8d48988d1e7931735&client_id=" + id + "&client_secret=" + secret + "&v=20190309";
alert(url);
$.ajax({
url: url,
dataType: 'json',
success: function(data) {
var venues = data.response.venues;
alert(venues);
$.each(venues, function(i, venue) {
$('#venue-result').append(venue.name + '<br />');
});
}
});
});
});
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<label>City:</label>
<input type="text" id="search-input" />
<button type="button" id="search-button">Search</button>
<div id="venue-result"></div>
</body>
</html>
我正在从 class 实例化一个新变量。 class 有一个构造函数 city,然后通过 foursquare API 获取爵士乐俱乐部。
当我将城市名称硬编码到实例化的 class 中时,它工作正常。但是当我想给它提供一个动态值(我通过 DOM 从搜索栏中获取的查询)时,它不会识别城市。这是代码:
Class:
class Venues {
constructor(city) {
this.id = '...';
this.secret = '...';
this.city = city;
}
async getVenues() {
const response = await fetch(`https://api.foursquare.com/v2/venues/search?near=${this.city}&categoryId=4bf58dd8d48988d1e7931735&client_id=${this.id}&client_secret=${this.secret}&v=20190309`);
const venues = await response.json();
return venues;
}
}
const input = document.getElementById('search-input').value;
const button = document.getElementById('button');
const jazzClubs = new Venues(input);
button.addEventListener('click', (e) => {
e.preventDefault();
getJazzVenues();
})
function getJazzVenues() {
jazzClubs.getVenues()
.then(venues => {
console.log(venues);
})
.catch(err => {
console.log(err);
});
}
有人知道为什么 input
变量的值不能被新实例化的 jazzClubs 变量识别吗?
此外,如果您有关于如何更好或更整洁地构建此代码的提示,欢迎提出任何建议(class 定义已经在单独的文件中)。
非常感谢你们!
亚当
您需要确定,点击按钮后会触发以下语句。
const input = document.getElementById('search-input').value;
const jazzClubs = 新场地(输入);
您的代码看起来也太复杂了。使用 jquery 使用更简单的代码。 尝试这样的事情:
$(document).ready(function() {
$("#search-button").click(function() {
var searchval = $("#search-input").val();
var id = "xxx";
var secret = "yyy";
alert(searchval);
var url = "https://api.foursquare.com/v2/venues/search?near=" + searchval + "&categoryId=4bf58dd8d48988d1e7931735&client_id=" + id + "&client_secret=" + secret + "&v=20190309";
alert(url);
$.ajax({
url: url,
dataType: 'json',
success: function(data) {
var venues = data.response.venues;
alert(venues);
$.each(venues, function(i, venue) {
$('#venue-result').append(venue.name + '<br />');
});
}
});
});
});
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<label>City:</label>
<input type="text" id="search-input" />
<button type="button" id="search-button">Search</button>
<div id="venue-result"></div>
</body>
</html>