【问题标题】:Using JSONP API from forecast.io with WinJS使用来自 forecast.io 的 JSONP API 和 WinJS
【发布时间】:2013-08-27 22:13:48
【问题描述】:

首先,如果这是一个愚蠢的问题,我深表歉意,我是 WinJS 的新手,对 Javascript 也比较陌生,但在遇到这个障碍之前我一直做得很好。

我目前正在使用 WinJS 开发适用于 Windows 8 的天气应用程序,并且我正在尝试从 forecast.io API 中提取数据,在我的情况下,该 API 以 JSONP 格式提供。 我很容易使用 jQuery 和 .getJSON 在浏览器中工作,但由于我必须使用 WinJS.xhr 来请求数据,所以我遇到了一些困难。

我可以使用以下代码很好地提取数据:

function getWeather() {
    WinJS.xhr({
        type: "GET",
        url: "https://api.forecast.io/forecast/*ommited API key*/-36.044394,146.953718?callback=?&units=si",
        headers: { "Content-type": "application/json" }
    }).then(function complete(data) {
        var weatherData = data.responseText;
        (new Windows.UI.Popups.MessageDialog(weatherData, "Success!")).showAsync().done();
    }, function error(data) {
        (new Windows.UI.Popups.MessageDialog("Failed.", "Error")).showAsync().done();
    });
}

这会在弹出窗口中向我显示数据,所以我确定我已经访问过它。问题是,我对此无能为力。在 jQuery 中,我只是使用“data.currently.temperature”来获取当前温度数据,但在这种情况下我无法获得类似的工作。

任何帮助或指点将不胜感激!

P.S 抱歉,如果我扼杀了任何术语,我会尽力而为。

这是 data.responseText 返回的内容,有很多,所以我把它放在一个文本文件中。 http://justadddesign.net/data.responseText.txt

【问题讨论】:

    标签: javascript jquery windows-8 microsoft-metro winjs


    【解决方案1】:

    这是因为data.responseText 是字符串而不是对象。试试:

    var forecastInfo = JSON.parse(data.responseText);
    

    然后访问forecastInfo对象属性。

    【讨论】:

    • 我不能,JSON.parse 抛出一个错误,说有一个无效字符
    • 从调试器共享 data.responseText 文本。
    • 添加到原帖
    • 我明白了,只需删除回调=?来自 url,因此响应将作为有效 JSON 返回。同源策略不适用于 winjs 应用程序,因此您应该能够在没有 JSONP hack 的情况下工作。
    • 非常感谢!你是我的救星:D
    猜你喜欢
    • 2013-08-10
    • 2019-07-09
    • 1970-01-01
    • 2012-11-06
    • 2012-01-14
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多