OpenSocial API 支持保存和检索每个用户和每个应用程序的数据。在 OpenSocial v0.5 和 v0.6 中,也支持每个应用程序实例和全局应用程序数据,但是在 v0.7 中删除了。
该代码段显示了将数据保存到共享存储中的方式:
function populateMyAppData() {
var req = opensocial.newDataRequest();
var data1 = Math.random() * 5;
var data2 = Math.random() * 100;
var data3 = new Date().getTime();
req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField1", data1));
req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField2", data2));
req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField3", data3));
req.send(handlePopulateMyAppData);
};
可以按以下方式检索存储在以上代码段中的数据:
var req = opensocial.newDataRequest();
//Request the following three app fields
var fields = [ "AppField1", "AppField2", "AppField3" ];
req.add(req.newFetchPersonAppDataRequest("VIEWER", fields), "viewer_data");
req.send(handleRequestMyData);以下是应用程序的完整代码。它将为查看者设置一些值,然后对其进行检索:
<?xml version="1.0" encoding="UTF-8" ?>
gadgets.util.registerOnLoadHandler(populateMyAppData);
var htmlout = "";
var me = null;
/************************************************************************
* Set user data
*/
function populateMyAppData() {
var req = opensocial.newDataRequest();
var data1 = Math.random() * 5;
var data2 = Math.random() * 100;
var data3 = new Date().getTime();
htmlout += "Setting AppField1 to " + data1 + "
";
req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField1", data1)) + "
";
htmlout += "Setting AppField2 to " + data2 + "
";
req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField2", data2)) + "
";
htmlout += "Setting AppField3 to " + data3 + "
";
req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppField3", data3)) + "
";
req.send(handlePopulateMyAppData, "update_appdata");
}
/************************************************************************
* Handle responses from update person app data requests
*/
function handlePopulateMyAppData(data) {
if (data.hadError()) {
htmlout += data.getError();
}
requestMyData();
}
/************************************************************************
* Fetch app data
*/
function requestMyData() {
var req = opensocial.newDataRequest();
var fields = [ "AppField1", "AppField2", "AppField3" ];
req.add(req.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER), "viewer");
req.add(req.newFetchPersonAppDataRequest("VIEWER", fields), "viewer_data");
req.send(handleRequestMyData);
}
/************************************************************************
* Handle responses from app data requests
*/
function handleRequestMyData(data) {
var mydata = data.get("viewer_data");
var viewer = data.get("viewer");
me = viewer.getData();
if (mydata.hadError()) {
htmlout += data.getError();
return;
}
// Do something with the returned data - note the getData call
doSomethingWithMyData(mydata.getData());
}
/************************************************************************
* Operate on user data
*/
function doSomethingWithMyData(data) {
//Data is indexed by user id, and represents an object where keys
//correspond with the app data fields.
var mydata = data[me.getId()];
var div = document.getElementById('content_div');
htmlout += "My AppField1 data is: " + mydata["AppField1"] + "
";
htmlout += "My AppField2 data is: " + mydata["AppField2"] + "
";
htmlout += "My AppField3 data is: " + mydata["AppField3"] + "
";
div.innerHTML = htmlout;
}
]]>
注意:存储在 OpenSocial 应用程序中的数据始终是字符串。大多数用途是,使其成为 JSON 编码字符串。因为 OpenSocial 执行自动 HTML(对所有包括应用程序数据的返回数据进行编码),所以必须在解析它们之前对应用程序数据存储中字符串化的 JSON 对象进行解码。例如:
var unescapedString = gadgets.util.unescapeString(jsondata);
var bj = gadgets.json.parse(unescapedString);
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14734354/viewspace-432969/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14734354/viewspace-432969/