如何在 odoo javascript 中从 url 获取 json 数据
How to get the json data from url in odoo javascript
如何使用 JavaScript 从 url 获取 JSON 数据。我尝试了以下但它没有提供 json 数据。
var GetLocation = function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
else {
alert("Geolocation is not supported by this browser.");
}
}
function showPosition(position, http) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var app_id = '6784429f5eff661309aaa5280a143f97';
var api = "http://api.openweathermap.org/data/2.5";
var weather_api = api +"/weather?appid="+app_id+"&lat="+lat+"&lon="+lon+"&units=metric";
// console.log(weather_api);
var a = http.get(weather_api).then(function(response){
position.jsonList=response.data;
});
console.log(a);
}
当打印 weather_api 时,它会给出完整的 url,但我仍然不知道如何从 url.
中获取 json 数据
有几件事:
- 你必须了解异步调用流程。
- 如果您正在学习教程,则必须了解教程中的所有内容。
#1
参考 JavaScript 中的 this for Asynchronous call flow. Then learn about Promises。
#2
您正在学习的教程使用的是 Angular.js,它具有内置的 $http
模块,其中有一个 get
方法。在你的情况下,看起来你没有使用 Angular.js 并且 showPosition
函数被 navigator.geolocation.getCurrentPosition
调用,因此在调用 [=] 时不会传递 http
模块15=]函数。
我使用 jQuery
库添加了一个简单的 http 模块。因此,要使此代码有效,您必须在 html 文件中包含 jQuery
。无论如何,下面的代码必须让您了解如何在 JavaScript 中创建对象和方法,并且如果您需要其他库来处理 HTTP 请求,则必须能够替换 jQuery。
var http = {
get: function(url) {
return new Promise(function(resolve, reject) {
$.get(url, resolve).fail(reject);
})
}
};
var GetLocation = function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
else {
alert("Geolocation is not supported by this browser.");
}
}
function showPosition(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var app_id = '6784429f5eff661309aaa5280a143f97';
var api = "http://api.openweathermap.org/data/2.5";
var weather_api = api +"/weather?appid="+app_id+"&lat="+lat+"&lon="+lon+"&units=metric";
// console.log(weather_api);
var a = http.get(weather_api).then(function(response){
position.jsonList=response;
console.log(position.jsonList);
});
}
注意:请注意,我已将 console.log
移动到 promise 处理程序中。
如何使用 JavaScript 从 url 获取 JSON 数据。我尝试了以下但它没有提供 json 数据。
var GetLocation = function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
else {
alert("Geolocation is not supported by this browser.");
}
}
function showPosition(position, http) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var app_id = '6784429f5eff661309aaa5280a143f97';
var api = "http://api.openweathermap.org/data/2.5";
var weather_api = api +"/weather?appid="+app_id+"&lat="+lat+"&lon="+lon+"&units=metric";
// console.log(weather_api);
var a = http.get(weather_api).then(function(response){
position.jsonList=response.data;
});
console.log(a);
}
当打印 weather_api 时,它会给出完整的 url,但我仍然不知道如何从 url.
中获取 json 数据有几件事:
- 你必须了解异步调用流程。
- 如果您正在学习教程,则必须了解教程中的所有内容。
#1
参考 JavaScript 中的 this for Asynchronous call flow. Then learn about Promises。
#2
您正在学习的教程使用的是 Angular.js,它具有内置的 $http
模块,其中有一个 get
方法。在你的情况下,看起来你没有使用 Angular.js 并且 showPosition
函数被 navigator.geolocation.getCurrentPosition
调用,因此在调用 [=] 时不会传递 http
模块15=]函数。
我使用 jQuery
库添加了一个简单的 http 模块。因此,要使此代码有效,您必须在 html 文件中包含 jQuery
。无论如何,下面的代码必须让您了解如何在 JavaScript 中创建对象和方法,并且如果您需要其他库来处理 HTTP 请求,则必须能够替换 jQuery。
var http = {
get: function(url) {
return new Promise(function(resolve, reject) {
$.get(url, resolve).fail(reject);
})
}
};
var GetLocation = function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
else {
alert("Geolocation is not supported by this browser.");
}
}
function showPosition(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var app_id = '6784429f5eff661309aaa5280a143f97';
var api = "http://api.openweathermap.org/data/2.5";
var weather_api = api +"/weather?appid="+app_id+"&lat="+lat+"&lon="+lon+"&units=metric";
// console.log(weather_api);
var a = http.get(weather_api).then(function(response){
position.jsonList=response;
console.log(position.jsonList);
});
}
注意:请注意,我已将 console.log
移动到 promise 处理程序中。