通过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服务都可以用作此问题的示例。
答案 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。