如何在 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. 你必须了解异步调用流程。
  2. 如果您正在学习教程,则必须了解教程中的所有内容。

#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 处理程序中。