无法在BlackBerry Cascades中通过https加载JSON DataSource

时间:2013-01-16 13:45:41

标签: javascript qml blackberry-cascades

通过https加载我的JSON DataSource似乎失败了。它在我在BlackBerry 10设备上的浏览器中加载URL时有效,但在我尝试在Qml中使用该URL时失败。

这就是我的DataSource对象:

DataSource {
    id: dsTitles
    source: ""
    type: DataSourceType.Json
    onDataLoaded: {
        if (Common.hasError(updateError, data, "Failed to load data. Please check your connection and try again.")) {
            console.log("Data contains error");
            navigationPane.pop();
            return;
        }
        loadedTitles = true;
        Code.loadDropDown(data, ddTitle, "title", "titleId")
        Code.hideLoadIndicator();
        if (updateProfile && ddTitle.selectedValue == null) {
            Code.setDropDownOptionByValue(ddTitle, profile.userTitleId);
        }
    }
    onError: {
        console.log("Failed to load titles: " + errorMessage);
    }

任何https JSON Web服务都可以用作此问题的示例。

3 个答案:

答案 0 :(得分:0)

可以使用XMLHttpRequest从JavaScript加载数据。我创建了以下两个函数:

function loadJsonDataList(value,dataModel) {     for(var i = 0; i< value.length; i ++){         dataModel.insert(值[I]);     }     回报值; }

function loadData(url,onComplete){     var request = new XMLHttpRequest();

request.open("GET", url);
request.send();

request.onreadystatechange = function() {
    if (request.readyState === 4 && request.status === 200) {
        onComplete(JSON.parse(request.responseText));
    } else {

        onComplete(request.responseText);
    }
};

}

您可以按如下方式使用上述功能:

function getData2() 
{
    console.log("Get data called");
    Common.loadData("https://mywebservice/here/someFunction", getDataCallBack);
}

function getDataCallBack(dataObject) 
{
    console.log("Get data callback called");
    Common.loadJsonDataList(dataObject, lstViewItems.dataModel);
}

目前,似乎Qml DataSource对象无法加载SSL Web服务数据,但是可以如上所述手动加载它。我会尽量密切关注这个问题并在最终解决问题时更新答案,或者如果另一个答案可以解释如何以这种方式使用DataSource。

答案 1 :(得分:0)

我最后在我的数据源中使用https解决了这个问题。明确声明remote : true

这似乎解决了无法加载的安全JSON源。

答案 2 :(得分:-2)

您不能使用http值作为源,您需要实际下载JSON文件,然后将其传递给数据源。

blackberry的“Weatherguesser”示例应用程序展示了如何从在线资源中获取数据并将其传递给您的qml。

专门查看weathermodel.cpp文件,该文件在线下载json文件中的天气数据。

简而言之,您需要一个NetworkAccessManager,然后需要传递一个url进行下载。然后,结果可以用c ++管理,也可以直接传递给qml。