I think I have a tough one for you guys. Or at least it’s been tough for me. I’ve been searching for the best way to do this in Stack Overflow and everyone that has asked has been given a different response.
I have this code that is accessing an API and calling a maintenance list of all the vehicles in a fleet.
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;
});
};
The code above works well. What I was attempting to do here was write the stringified response to a file. Save that file in the server. Call it from another page using JavaScript and save it as an object in JavaScript, parse it using JSON.parse(), and then pull the required information.
Here’s an explanation as to why I’m trying to do it this way. When I call the maintenance list from the API, I’m getting the entire maintenance list from the API, but I need to be able to display only parts of the information from the list.
On one page, we’ll call it vehicle-list.php, on it I have a list of all the vehicles in our fleet. They all have unit numbers assigned to them. When I click on a unit number on this page it’ll take me to another page which has more information on the vehicle such as the VIN number, license plate, etc. we’ll call this page vehicle-info.php. We’re using this page for all the vehicles’ information, in other words, when we click on different unit numbers on vehicle-list.php it’ll always take us to vehicle-info.php. We’re only updating the DOM when we go to the page.
I only want to include the information specific to each vehicle unit in the page along with the other info in the DOM. And I only want to call the info from the API once as I am limited to a certain amount of calls for that API. This is why I am attempting to do it this way.
I will say that what I originally wanted to do was get this JSON response once every 24 hours by using a function in vehicle-list.php save the reponse as a variable as seen above var jsonMaintenance = response;
and then just access certain parts of the array every time a unit number is clicked. However, I have been unable to access the variable in any other page. I’ve written many test files attempting to call jsonMaintenance
without success so I’ve been trying to to just save it as a text file to the server and I haven’t been able to figure that out either.
After explaining all of the above. My questions are these:
How do I best manipulate this data to accomplish what I want to accomplish? What would be the best standard? Is the above code even the right way to call the data for what I’m trying to do?
There doesn’t seem to be a set standard on accomplishing any of this when I search on Stack Overflow. I’d like to be as efficient as possible.
Thank you for your time.
3
Answers
If i ran into a similiar problem i would just store the data in a database of my own and call it from there, considering you are only (willing/abe/allowed) to request the data from the API very rarely but need to operate on the data quite frequently (whenever someone clicks on a specific vehice on your applicaiton) this seems like the best course of action.
So rather than querying the data on client side, I’d call it from server, store it on server and and have the client operate on that data.
there is a lot of ways how you pass your data through your website after getting it in from an api call, the best approach is to store these information in a database and call it back in which ever way you want, you can do that as far as you are using php, you can store it to sql or to access, if you don’t want to store these information in a database like in sql or access, then best way is to store it to localStorage and call it back whenever you want.
I will show you briefly how you can do that, if you want better explanation post an example of your returned data.
to store an item in localstorage use,
to call an item back from localstorage use,
to remove specific item from localstorage use,
to clear all items saved to localstorage use,
be aware storing the data to localStorage is only at the station you are using
I would do it somehow like this.
Call the maintenance list from the API with the server side language of your choice which seems to be
PHP
in your case. Lets say the script is called:get-list.php
. This can be triggered by a cron job runningget-list.php
in intervals limited to the certain amount of calls that you are allowed to do for that API. Or if you are not able to create cron jobs then trigger the sameget-list.php
with anAJAX
-call (egjQuery.get('sld.tld/get-list.php')
– in this caseget-list.php
have to figure out if its the right time to call the API or not).Now that you have the data you can prepare it as you want and store it as a
JSON
-string in a text file or database of your choice. If I get you right you have a specific dataset for each vehicle, which have to be identified by an id (you named it “unit number”) so yourJSON
would look kind of:{"unit1": { property1: "val1", property2: "val2" }, "unit2": { property1: "valXYZ", property2: "valABC" }}
or alike.Now when you link to
vehicle-info.php
fromvehicle-list.php
, you do it like so:<a href="sld.tld/vehicle-info.php?id=unit1">ancor</a>
or similar as well. Of course you can also grab the data withAJAX
, its just important to delivervehicle-info.php
the corresponding unit number (or id – better to say) and you are good to go.vehicle-info.php
now have all there is to render the page, which is the complete data set stored in text file or data base and the id (unit number) to know which part of the whole dataset to extract.I wanted to give you this different approach because in my experience this should work out just so much better. If you are working server side (eg
PHP
) you have write permissions which is not the case forJavaScript
-client side. And also performance is not so much of an issue. For instance its not an issue if you have heavy manipulating on the data set at theget-list.php
-level. It can run for minutes and once its done it stores the ready-to-use-data making it staticly available without any further impact on performance.Hope it helps!