首页 > 解决方案 > 如何从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数据。

标签: javascriptodooodoo-10odoo-11

解决方案


有几件事:

  1. 您必须了解异步调用流程。
  2. 如果您正在学习教程,则必须了解教程中的所有内容。

#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.logPromise 处理程序的内部。


推荐阅读