1

通过 https 加载我的 JSON 数据源似乎失败了。当我在 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 服务都可以用作此问题的示例。

4

3 回答 3

0

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

函数 loadJsonDataList(value, dataModel) { for (var i = 0; i < value.length; i ++) { dataModel.insert(value[i]); } 返回值;}

函数 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,我将尝试关注这个问题并更新答案。

于 2013-04-15T07:58:51.183 回答
0

我终于在我的数据源中使用 https 解决了这个问题。通过显式声明remote : true.

这现在似乎解决了不加载安全 JSON 源的问题。

于 2015-07-19T09:46:11.893 回答
-2

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

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

具体看一下 weathermodel.cpp 文件,该文件从 json 文件在线下载天气数据。

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

于 2013-01-18T10:58:07.610 回答