如何从odoo javascript中的url获取json数据

时间:2018-04-25 09:42:56

标签: javascript odoo odoo-10 odoo-11

如何使用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时,它会提供完整的网址,但我仍然不知道如何从该网址获取json数据。

1 个答案:

答案 0 :(得分:0)

有几件事:

  1. 您必须了解异步呼叫流程。
  2. 如果您正在学习教程,您必须了解教程中的所有内容。
  3. #1请参阅this了解异步呼叫流程。然后在JavaScript中了解Promises

    #2您正在使用的教程是使用Angular.js,它具有内置的$http模块,其中包含get方法。在你的情况下,看起来,你没有使用Angular.js&另外,showPosition调用navigator.geolocation.getCurrentPosition函数,因此在调用http函数时不会传递showPosition模块。

    我使用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处理程序中。