0

我只想从组件的烬元服务中获取json请求的值。 这是我的代码通过组件传递的ajax请求烬元

预测,weather.js(服务)

import Ember from 'ember'; 
    export default Ember.Service.extend({ 
     findWeatherCurrent:function (lat,lng) { 
     return Ember.$.getJSON('https://api.darksky.net/forecast/22b106924ed7e3bcde76608f7f064585/'+ lat +','+lng+'?exclude=minutely,hourly,daily,flags&units=si'); 
     }, 
     findWeatherDaily:function (lat,lng) { 
     return Ember.$.getJSON('https://api.darksky.net/forecast/22b106924ed7e3bcde76608f7f064585/'+ lat +','+lng+'?exclude=minutely,hourly,currently,flags&units=si'); 
     }, 
     findWeatherHourly:function (lat,lng) { 
     return Ember.$.getJSON('https://api.darksky.net/forecast/22b106924ed7e3bcde76608f7f064585/'+ lat +','+lng+'?exclude=minutely,daily,currently,flags&units=si'); 
     } 
    }); 

天气display.js(组件)

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    forecastWeather:Ember.inject.service(), 
    willRender(){ 
    let lat = this.get('lat'); 
    let lng = this.get('lng'); 
    this.get('forecastWeather').findWeatherCurrent(lat,lng).then(data => { 
     this.set('currents', data); 
     console.log(data); 
    }); 
    } 
}); 

jsonRespon

{ 

    "latitude": 37.8267, 
    "longitude": -122.4233, 
    "timezone": "America/Los_Angeles", 
    "offset": -7, 
    "currently": { 
     "time": 1489488513, 
     "summary": "Clear", 
     "icon": "clear-night", 
     "nearestStormDistance": 47, 
     "nearestStormBearing": 87, 
     "precipIntensity": 0, 
     "precipProbability": 0, 
     "temperature": 13.54, 
     "apparentTemperature": 13.54, 
     "dewPoint": 8.59, 
     "humidity": 0.72, 
     "windSpeed": 0.87, 
     "windBearing": 46, 
     "visibility": 12.46, 
     "cloudCover": 0.08, 
     "pressure": 1016.58, 
     "ozone": 279.62 
    } 

} 

天气display.hbs

<p id="word_on_change" class="font_black font-white word">{{currents.currently.windSpeed}}</p> 

我只是想传递一个风速值从JSON哈佛商学院的模板,但它不工作。 谁能解决这个:(

回答

3

要处理的$.getJSON其重要结果知道你jQuery版本,其中一个在jQuery 3最重要的变化是,jQuery.Deferred is now Promises/A+兼容。

可能你使用的是jQuery版本预3.0,这意味着你必须在Deferred变换为Promise可与Ember.RSVP.resolve()完成。

然而,这是不是你的问题

您的实际问题

我第一次建立一个twiddle with your code。考虑下次自己做这件事;-)。 在那里你看到控制台中的错误:

XMLHttpRequest无法加载https://api.darksky.net/forecast/22b106924ed7e3bcde76608f7f064585/46.9483,7.4515?exclude=minutely,hourly,daily,flags&units=si。请求的资源上没有“Access-Control-Allow-Origin”标题。因此不允许原产地'null'访问。

这是因为darksky有disabled CORS for their API。这意味着你无法直接从浏览器JavaScript中访问API

您必须请求您自己的Web服务器,然后可以对darksky API执行请求。

check the references about CORS

但请求返回的开发工具200 OK或HTTP调试

是。这就是CORS的工作原理。数据已成功返回到浏览器的应用程序,但由于CORS标题丢失浏览器不允许您的网站访问响应。这是一个重要的安全功能。

+0

如何确保jQuery的版本?它是用“凉亭”写成的。JSON'在以前版本的烬。 – ykaragol

+2

该版本现在[在'ember-source'本身中指定](https://github.com/emberjs/ember.js/blob/master/package.json#L54)。 – Lux