Каков наилучший способ манипулировать ответом API AJAX JSON и передавать его на другую страницу? - PullRequest
0 голосов
/ 07 марта 2020

Я думаю, что у вас сложный вопрос, ребята. Или, по крайней мере, мне было тяжело. Я искал лучший способ сделать это в переполнении стека, и все, кто спросил, получили разные ответы.

У меня есть этот код, который обращается к API и вызывает список обслуживания всех автомобили в парке.

function getMaintenanceList() {
  var settings = {
    "url": "API URL HERE",
    "method": "GET",
    "timeout": 0,
    "headers": {
    "Authorization": "Bearer token here"
  },
  };

  $.ajax(settings).done(function (response) {
    // The response the API sends is a JSON object.
// It is an array.

var jsonMaintenance = response;
    var parsedJson = JSON.stringify(jsonMaintenance);

//Left over code from when I was trying to
//pass the data directly into the other page
// I was unable to do so
//return jsonMaintenance;

//Left over code from when this was in a PHP file
//and I was posting the stringified response to the page
// for testing purpose
//I had to disable CORS in Google Chrome to test the response out
//console.log(jsonMaintenance);
//document.getElementById("main").innerHTML = parsedJson;

});

};

Код выше работает хорошо. То, что я пытался сделать здесь, это написать строковый ответ в файл. Сохраните этот файл на сервере. Вызовите его с другой страницы, используя JavaScript, и сохраните его как объект в JavaScript, проанализируйте его с помощью JSON .parse (), а затем извлеките необходимую информацию.

Вот объяснение, почему Я пытаюсь сделать это таким образом. Когда я вызываю список обслуживания из API, я получаю весь список обслуживания из API, но мне нужно иметь возможность отображать только части информации из списка.

На одной странице мы Я назову это списком транспортных средств. php, на нем у меня есть список всех транспортных средств в нашем автопарке. Им всем присвоены номера юнитов. Когда я нажимаю на номер устройства на этой странице, я перехожу на другую страницу с более подробной информацией о транспортном средстве, такой как номер VIN, номерной знак и т. Д. c. мы будем называть эту страницу информацией об автомобиле. php. Мы используем эту страницу для всей информации об автомобилях, другими словами, когда мы нажимаем на разные номера единиц в списке транспортных средств. php это всегда приведет нас к информации об автомобиле. php. Мы обновляем DOM только когда мы go на страницу.

Я только хочу включить информацию, указанную c для каждого транспортного средства на странице, наряду с другой информацией в DOM. И я хочу вызвать информацию из API только один раз, поскольку я ограничен определенным количеством вызовов для этого API. Вот почему я пытаюсь сделать это таким образом.

Я скажу, что первоначально я хотел получать этот ответ JSON один раз каждые 24 часа, используя функцию из списка транспортных средств. php сохранить ответ как переменную, как показано выше var jsonMaintenance = response;, а затем просто получать доступ к определенным частям массива каждый раз, когда нажимается номер единицы. Однако я не смог получить доступ к переменной на любой другой странице. Я написал много тестовых файлов, пытаясь вызвать jsonMaintenance безуспешно, поэтому я пытался просто сохранить его в виде текстового файла на сервере, и я так и не смог выяснить это.

После объяснения всего вышеперечисленного. Вот мои вопросы:

Как мне лучше всего манипулировать этими данными для достижения sh того, чего я хочу достичь sh? Какой будет лучший стандарт? Является ли приведенный выше код правильным способом вызова данных для того, что я пытаюсь сделать?

Похоже, не существует установленного стандарта для выполнения всего этого при поиске в переполнении стека. Я хотел бы быть максимально эффективным.

Спасибо за ваше время.

Ответы [ 3 ]

1 голос
/ 07 марта 2020

Я бы сделал это как-то так.

  1. Вызовите список обслуживания из API с серверной стороной по вашему выбору, который выглядит как PHP в твоем случае. Допустим, скрипт называется: get-list.php. Это может быть вызвано заданием cron, запущенным get-list.php с интервалами, ограниченными определенным количеством вызовов, которые вам разрешено делать для этого API. Или, если вы не в состоянии создать задания cron, то вызовите тот же get-list.php с AJAX -событием (например, jQuery.get('sld.tld/get-list.php') - в этом случае get-list.php нужно выяснить, настало ли время для вызова API или не).

  2. Теперь, когда у вас есть данные, вы можете подготовить их по своему усмотрению и сохранить в виде JSON -строки в текстовом файле или базе данных по вашему выбору. Если я вас правильно понял, у вас есть определенный c набор данных для каждого транспортного средства, который должен быть идентифицирован по идентификатору (вы назвали его «номером единицы»), чтобы ваш JSON выглядел примерно так: {"unit1": { property1: "val1", property2: "val2" }, "unit2": { property1: "valXYZ", property2: "valABC" }} или похожий.

  3. Теперь, когда вы ссылаетесь на vehicle-info.php из vehicle-list.php, вы делаете это так: <a href="sld.tld/vehicle-info.php?id=unit1">ancor</a> или аналогичный. Конечно, вы также можете получить данные с помощью AJAX, просто важно доставить vehicle-info.php соответствующий номер устройства (или идентификатор - лучше сказать), и вы хороши для go.

  4. vehicle-info.php теперь есть все, что нужно для рендеринга страницы, то есть полный набор данных, хранящийся в текстовом файле или базе данных, и идентификатор (номер блока), чтобы узнать, какую часть всего набора данных извлечь.

Я хотел предложить вам другой подход, потому что по моему опыту это должно сработать намного лучше. Если вы работаете на стороне сервера (например, PHP), у вас есть права на запись, что не относится к стороне клиента JavaScript. А также производительность не так важна. Например, это не проблема, если у вас есть серьезные манипуляции с набором данных на уровне get-list.php. Он может работать в течение нескольких минут, а по завершении сохраняет готовые к использованию данные, делая их статически доступными без какого-либо влияния на производительность.

Надеюсь, это поможет!

0 голосов
/ 07 марта 2020

Существует множество способов передачи данных через веб-сайт после их получения с помощью API-вызова. Лучший способ - сохранить эту информацию в базе данных и перезвонить ей любым удобным способом. сделайте это, поскольку вы используете php, вы можете сохранить его в sql или для доступа, если вы не хотите хранить эту информацию в базе данных, как в sql или для доступа, тогда лучший способ это сохраните его в localStorage и перезвоните, когда захотите. Я кратко покажу вам, как вы можете это сделать, если вы хотите лучшего объяснения, опубликуйте пример ваших возвращенных данных.

для хранения элемента в локальном хранилище,

localStorage.setItem('key', 'value');

для вызова элемент, возвращенный из локального хранилища,

var somevar = localStorage.getItem('key')

для удаления указанного c элемента из локального хранилища,

localStorage.removeItem('key')

для очистки всех элементов, сохраненных в локальном хранилище,

localStorage.clear()

имейте в виду, что хранение данных в localStorage возможно только на станции, которую вы используете

0 голосов
/ 07 марта 2020

Если бы я столкнулся с подобной проблемой, я бы просто сохранил данные в собственной базе данных и вызвал бы их оттуда, учитывая, что вы только (хотите / abe / позволили) запрашивать данные из API очень редко, но нуждаетесь работать с данными довольно часто (всякий раз, когда кто-то нажимает на конкретное c средство в вашем приложении), это кажется лучшим вариантом действий.

Поэтому вместо того, чтобы запрашивать данные на стороне клиента, я бы вызовите его с сервера, сохраните на сервере и попросите клиента работать с этими данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...