ajax请求ember通过组件

时间:2017-03-14 11:12:01

标签: javascript json ember.js ember-components ember-controllers

我只想从组件的ember服务中获取json请求的价值。 这是我的代码

forecast-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');
      }
    });

weather-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的windspeed值传递给hbs模板,但它不起作用。 任何人都可以解决这个问题:(

1 个答案:

答案 0 :(得分:3)

要处理$.getJSON的结果,了解您的jQuery版本非常重要。 jQuery 3中最重要的变化之一是jQuery.Deferred is now Promises/A+兼容。

您可能正在使用jQuery 3.0之前的Deferred版本,这意味着您必须将Promise转换为Ember.RSVP.resolve(),这可以通过200 OK完成

然而,不是您的问题

您的实际问题

首先我建立一个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。这意味着您无法直接从浏览器中访问API

您必须请求自己的Web服务器,然后可以向darksky API发出请求。

check the references about CORS

但是请求在开发工具或HTTP调试器

中返回gradle build :compileJava warning: [options] bootstrap class path not set in conjunction with -source 1.7 /home/sofian/Programmation/Web/phone-appli/src/main/java/fr/cavallones/phoneappli/MainActivity.java:8: error: cannot find sym bol import fr.cavallones.phoneappli.R; ^ symbol: class R location: package fr.cavallones.phoneappli /home/sofian/Programmation/Web/phone-appli/src/main/java/fr/cavallones/phoneappli/MainActivity.java:18: error: package R does not exist setContentView(R.layout.layout_activity); ^ 2 errors

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