Я использую API, который позволяет мне получать доступ к объектам JSON, которые я использовал, и преобразовывать их в объект JavaScript. Я получаю консольный журнал названий фильмов, так что это работает.
Теперь мне интересно, можно ли ссылаться на этот объект фильма в других функциях? или мне нужно сделать запрос в каждой функции для доступа к свойствам фильма?
$("#search-button").click(function(){
search();
});
function search() {
var userInput = $("#content-container-search").val().replace(/\s+/g,"%20");
var searchTerm = "".concat(standardURL, apiKey, 'query=', userInput);
var request = new XMLHttpRequest();
request.open('GET', searchTerm , true);
request.onload = function(data) {
var data = JSON.parse(this.response);
if (data['results']){
data.results.forEach(film => {
if (film['title']){
console.info("film title : " + film.title);
}
});
}
}
request.send();
}
data.results — это массив, поэтому вы можете просто сделать что-то вроде myFunction(data.results[0]), и он передаст функции первый объект фильма. (также JSON — это текст)
@ChrisG Я думаю, что data - это объект; data.results — это массив.
var data внутри метода, который принимает аргумент data, — это запах кода



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вам нужно понимать область действия каждой переменной... если вы это сделаете, вы можете создать переменную с большей областью действия, например, если вы создадите var data; вне функции поиска, и когда вы получите данные, которые вы делаете: data=JSON.parse(this.response); у вас будет доступ к переменной data извне функции
что-то вроде этого:
$("#search-button").click(function(){
search();
});
var data;
function search() {
var userInput = $("#content-container-search").val().replace(/\s+/g,"%20");
var searchTerm = "".concat(standardURL, apiKey, 'query=', userInput);
var request = new XMLHttpRequest();
request.open('GET', searchTerm , true);
request.onload = function(data) {
data = JSON.parse(this.response);
data.results.forEach(film => {
console.info(film.title);
});
}
request.send();
}
Вы можете сделать это двумя способами:
$("#search-button").click(function(){
search();
});
var firmList; // global variable
function search() {
var userInput = $("#content-container-search").val().replace(/\s+/g,"%20");
var searchTerm = "".concat(standardURL, apiKey, 'query=', userInput);
var request = new XMLHttpRequest();
request.open('GET', searchTerm , true);
request.onload = function(data) {
var data = JSON.parse(this.response);
firmList = data; // set data to global variable.
data.results.forEach(film => {
console.info(film.title);
});
}
request.send();
}
function test(){ // test external function
console.info(firmList); // will log the object
}
/*******************OR *****************/
request.onload = function(data) {
var data = JSON.parse(this.response);
test(data); // pass the object to another function.
data.results.forEach(film => {
console.info(film.title);
});
}
function test(_object){ // test function.
console.info(_object); // will log the parsed response object here.
}
Внутри функции "onload" вы можете передать
dataлюбой функции, которая вам нравится.