Передача объекта JavaScript в другую функцию

Я использую 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();

}

Внутри функции "onload" вы можете передать data любой функции, которая вам нравится.

Pointy 06.02.2019 16:32
data.results — это массив, поэтому вы можете просто сделать что-то вроде myFunction(data.results[0]), и он передаст функции первый объект фильма. (также JSON — это текст)
Chris G 06.02.2019 16:32

@ChrisG Я думаю, что data - это объект; data.results — это массив.

Pointy 06.02.2019 16:33
var data внутри метода, который принимает аргумент data, — это запах кода
Taplar 06.02.2019 16:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
106
2

Ответы 2

Я думаю, вам нужно понимать область действия каждой переменной... если вы это сделаете, вы можете создать переменную с большей областью действия, например, если вы создадите 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.
}

Другие вопросы по теме