使用 Dojo 开发定制 Business Space 小部件,第 4 部分: 使用通用 REST 处理程序从 iWidget 发出可配置调用
2010-10-09 08:12:36 来源:WEB开发网loadRESTConfig 方法调用 _callREST 方法成功加载 JSON 文件。
_callREST 方法遍历 JSON 文件中的条目。当条目名称和关键名(页面名)相匹配时,它通过连接 restEndPoint(http://<serverip>:<port> part)和来自 JSON 文件的 URI 来构造 REST URL。它还检查是否有与特定 REST 调用相关的 URL 参数和查询参数,并构造相关 URL。
对于一个 POST 请求,它从 parameters 对象读取并设置内容。这些操作完成之后,相应的 XHR 调用被执行。
清单 2. _ callREST ( ) 方法遍历 JSON 文件并构造最终 REST URI
_callREST:function(response,type,restCallKey,restEndPoint,loadMethod,errorMethod,
syncFlag,parameters,thisVar)
{
var FUNCTIONNAME = "callREST()";
var itemsArray = eval(response).items;
var _restURL = "";
var urlParameters = "";
var queryParameters = "";
var contentParameter = "";
for (var i = 0; i < itemsArray.length; i++)
{
var item = itemsArray[i];
var entityName=item.name;
if(entityName==this.functionName)
{
var childrenArray = item.children;
for(var j=0;j< childrenArray.length;j++)
{
var child = childrenArray[j];
var childName=child.name;
if(childName==restCallKey){
_restURL = child.restURL;
requestTimeout = child.timeout;
break;
}
}
}
}
if(_restURL=="")
{
console.debug("Error: Unable to retrieve the REST URL");
} else {
if(parameters!=null)
{
urlParameters=parameters.urlParameters;
queryParameters=parameters.queryParameters;
contentParameter=parameters.content;
if(urlParameters!=null)
{
for(var i=0;i<urlParameters.count;i++)
{
key = urlParameters.getKey(i);
_restURL=_restURL.replace(key,
urlParameters.item(key));
}
}
if(queryParameters!=null)
{
queryString="?"
for(var i=0;i<queryParameters.count;i++)
{
if(i>0)
{
queryString=queryString+"&";
}
key = queryParameters.getKey(i);
queryString=queryString+key+"=
"+encodeURIComponent(queryParameters.item(key)); }
_restURL=_restURL+queryString;
}
}
console.debug("URL="+restEndPoint+_restURL);
var request = {
url: restEndPoint+_restURL,
handleAs:"json",
sync: syncFlag,
preventCache: true,
mimetype: 'text/json;charset=utf-8',
load: dojo.hitch(thisVar, loadMethod),
error: dojo.hitch(thisVar, errorMethod)
};
request.headers={};
if (type == 'GET')
{
request.headers["Accept"] = "application/json";
dojo.xhrGet(request);
} else if (type == "POST" || type == "RAWPOST") {
request.postData = contentParameter;
request.headers["Content-Type"] =
"application/json; charset=utf-8";
dojo.rawXhrPost(request);
} else if (type == "PUT" || type == "RAWPUT") {
request.putData = contentParameter;
request.headers["Content-Type"] =
"application/json; charset=utf-8";
dojo.rawXhrPut(request);
}else if(type == "DELETE"){
dojo.xhrDelete(request);
}
}
}
更多精彩
赞助商链接