刚刚去测试了一下,利用ajax的jsonp(跨域)的时候卡在了一个异常上:Uncaught SyntaxError: Unexpected token :。
这个异常是jd在对于ajax的跨域请求时没有对callback进行处理。所以无法让js获取到正确的json数据。
解决方案(php为例):用curl进行获取,也就是用后端做一次转发操作。jd官方也提供php的SDK。以下是我的jq的ajax代码 仅供参考。
$.ajax({url:'https://way.jd.com/showapi/address',
data: {
area:'鹿城',
areaid:'101210710',
needMoreDay:'0',
needIndex:'0',
needAlarm:'0',
need3HourForcast:'0',
appkey:'你申请的appkey',
ajax:1
},
type: "GET",
async:false,
dataType : "jsonp",
jsonp:'callback',
jsonpCallback:"jdwx",//jd返回json未对这个做处理导致js无法获取json
success: function (json) {
console.log(json)
},
error: function (msg) {
console.log(msg)
},
timeout:3000
})
//这是我以前开发天气wedget的时候写过的代码,原理是连接到yahoo api(返回XML),先用cityCode查国家 然后用woeid查地方,这是测试时写过的代码。Yahoo 天气api 好像一部分收费 最后没用yahoo 用 weatherbug的api 那个代码忘了存在哪里了,如果 非常着急的话在跟我说吧 我给你找找,还有调用api的原理,一般不会直接调用api 因为每个人访问时都调用一次的话系统受不了。最好写个windows service 每个一段时间调用一次api然后以.xml形式存放到一个文件夹,在系统中只调用xml文件就好了。如果api一时访问不到了也不会出问题。才看到你想要的是前台代码, 这是后台的
private string GetWeather(string cityCode)
{
string weather = string.Empty
if (cityCode == "" || string.IsNullOrEmpty(cityCode)) { cityCode = "seoul"}
XmlDocument document1 = new XmlDocument()
document1.Load("http://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text=" + cityCode + "&format=xml")
XmlNodeList nodes1 = document1.GetElementsByTagName("woeid")
string strWoeid = nodes1[0].InnerText
XmlDocument document = new XmlDocument()
document.Load("http://weather.yahooapis.com/forecastrss?w=" + strWoeid + "&u=c")
XmlNodeList nodes = document.GetElementsByTagName("forecast",
@"http://xml.weather.yahoo.com/ns/rss/1.0")
foreach (XmlNode node in nodes)
{
Console.WriteLine("日期:{0},星期:{1},天气:{2},温度:{3}°C 至 {4}°C",
node.Attributes["date"].InnerText,
node.Attributes["day"].InnerText,
node.Attributes["text"].InnerText,
node.Attributes["low"].InnerText,
node.Attributes["high"].InnerText)
//FToC(int.Parse(node.Attributes["low"].InnerText)),
// FToC(int.Parse(node.Attributes["high"].InnerText)))
// //woeid
// // http://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text="Wonju"&format=xml
}
return weather
}