【发布时间】:2016-02-12 03:53:28
【问题描述】:
我正在编写一个前端 Web 应用程序,它为用户的位置提供天气条件。虽然基本功能正常工作,但目前我正在尝试编写允许应用程序根据当前天气条件更改body 背景的逻辑。为此,我使用了OpenWeatherMap API。对此 API 的调用会返回 JSON 响应,在返回的许多内容中,有两个字段 - id 和 icon。 id 返回一个确定天气状况的数字代码,例如 晴朗的天空 或 破云,icon 返回一个确定是白天还是黑夜的字符串。
为了编写逻辑,我创建了一个 JS 对象,它的条件代码为id,为keys,对应的图像为values。在.ajax() 函数内部,我有一个switch 块,其中我switch 基于返回的id,然后使用.css("background-image", "url(link)"); 设置body 的背景图像。
代码的问题在于 - 这样浏览器似乎无法识别背景图像的 URL。我在控制台中看到 GET - ... 404 not found 错误。但是,如果不是尝试通过 JS 对象访问图像的 URL,而是直接将图像的 url 放在 .css() 中,它就可以工作。但这当然不是我想要的。
这是 JS 对象 -
//object for images
var weatherConditions = {
//Group 2xx: Thunderstorm
'2xx' : 'http://www.weathersnapshot.com/wp-content/uploads/2014/04/414.jpg',
//Group 3xx: Drizzle
'3xx' : 'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSsE4vZDsOCCsuE9X2WljNm0VewUdFj7onj438c9mD3_I6AfT71sA',
//Group 5xx: Rain
'5xx' : 'https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSsAlLmRls8CtL994qiwssqvQwdMNEI7yJcUUPWqNhMdtjGHExK',
//Group 6xx: Snow
'6xx': 'https://dl.dropbox.com/s/sywq7fk1u65lycf/6810006-snow-background.jpg?dl=0',
//Group 800: Clear - day and night
'800': ['https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTnYxZWx1uOc83uWxrTFfW7IiVj0XXMKM6fSdqS9U5kjh7Op_71WA', 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQnSe0ASBAUAcsvEAkQqO28WFGCjLWAgODq9eosh2SBr9f4-_NI4Q'],
//Group 80x: Clouds - day and night
'8xx' : ['https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQ_Fl9xNhT3AVwafZ2GeciqaqdLXosI-nPfhrVGvM7QFO0z0KQa', 'https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTgvOYSdZ7tHUybUfF5ydC2G97i78pv3hZ8jlX632lCu26VABGs3Q']
};
注意 - 我也尝试在 Dropbox 上托管图像,因为我认为错误可能是由于图像链接本身造成的。但是没有效果。
这是开关块的一部分 -
//---------get background-----------------
var weatherID = data.weather[0].id;
console.log("Weather ID = " + weatherID);
switch(weatherID) {
case 600: console.log(weatherConditions['6xx']);
$("body").css("background-image", "url(weatherConditions['6xx']");
break;
case 800: console.log("inside clear sky weather");
$("body").css("background-image", "url(weatherConditions.8xx[0])");
break;
case 803: //check for day or night
if(data.weather[0].icon.endsWith("d")) {
console.log("inside day weather");
$("body").css("background-image", "url(weatherConditions['8xx'][0])");
}
break;
case 804: $("body").css("background-image", "url(http://www.weathersnapshot.com/wp-content/uploads/2014/04/414.jpg)");
}
这是带有完整代码的Pen。
【问题讨论】:
标签: javascript jquery css image