javascript - 如何从odoo javascript中的url获取json数据
问题描述
如何使用 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 中的Promises。
#2
您正在遵循的教程使用 Angular.js,它具有内置$http
模块,其中包含一个get
方法。在你的情况下,看起来你没有使用 Angular.js 并且showPosition
函数被调用,所以调用函数时navigator.geolocation.getCurrentPosition
不会传递http
模块。showPosition
我使用jQuery
库添加了一个简单的 http 模块。因此,要使此代码正常工作,您必须将其包含jQuery
在您的 html 文件中。在任何情况下,以下代码必须让您了解如何在 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 处理程序的内部。
推荐阅读
- python-3.x - 如何与其他进程并行运行 tkinter 窗口?
- elixir - 如何使用 elixir 自定义任务启动持久牛仔服务器
- javascript - 在 x 轴上显示每 n 个标签
- java - 我无法获得有关 AngularJS 中验证错误的信息
- r - R dplyr:没有聚合函数的分组
- brython - 如何避免页面上的 Brython 错误?
- amazon-web-services - 了解在 ec2 上运行的 MYsql 服务已关闭的指标
- c# - C# DataGridView 从 SQL(Access) 中的条件绑定不显示数据
- c# - 将字符串列表添加到字典,然后检索它的值
- javascript - 如何向用户输入添加文本 - Vue