在 Windchill 中进行 Ajax 调用
只要上述方法不满足您的需求,您就可以将自己的 Ajax 请求提供给服务器以进行数据处理。
元素
|
类型
|
说明
|
requestHandler.doRequest
|
Javscript
|
具有进行 Ajax 请求的方法的 Javascript“类”
|
getElementHtml
|
Javascript
|
可更新页面某个部分的 Javascript 函数。使用 requestHandler 从服务器获取新 html。
|
过程 - 进行 Ajax 调用
要在 Windchill 中进行 Ajax 调用,请使用 requestHandler.doRequest() JavaScript 方法。如果需要,您可以为此方法提供用于在服务器上调用的 URL 和其他可选参数。其将返回响应,即 JavaScript XMLHttpRequest 对象。
以下示例显示了当用户更改对象创建向导的对象类型选取器中的值时,如何在 Windchill 中将此方法用于重置 DOM 中名为 "itemTypeInstanceId" 的隐藏字段。
<script>
.
.
.
var params = ‘pickerVal=’ + elementVal; // elementVal is the new value of the type picker
var options = {
asynchronous: false,
parameters: params
};
var url = “netmarkets/jsp/components/resetItemTypeInstanceId.jsp”;
var response = requestHandler.doRequest(url, options);
var newTypeInstanceId = response.responseText;
element = document.getElementById(currentObjectHandle +
“itemTypeInstanceId”);
element.value = newTypeInstanceId;
.
.
.
</script>
在这种情况下,系统会将 "pickerVal" 参数传递到请求参数中的 jsp。jsp 调用服务器方法来为对象计算新的 TypeInstanceIdentifier,并将其传递回响应:
<%
String pickerChoice = request.getParameter("pickerVal");
String typeInstanceIdentifier =
createBean.getNewTypeInstanceIdStringForNewItem(pickerChoice);
out.clearBuffer();
out.write(tiid);
out.flush();
%>
默认情况下,doRequest() 将进行异步请求,以便在等待响应时不会阻塞页面处理。如果希望进行同步请求,必须在传递给方法的选项中将异步设置为 false,如上所示。
如果请求是异步的,则需要提供 JavaScript 函数,以便当在参数为 doRequest() 的选项中成功接收响应时对其进行调用。例如:
var options={
asynchronous: true,
parameters: 'oid=' + oid,
onSuccess: function(response) {
var response = response.responseText;
var json = response.evalJSON();
var locationValue = json.locationValue;
var folderOid = json.folderOid;
setFolder(window, locationValue, folderOid);
}
};
在上面的示例中,调用的 jsp 会调用将 JSON 对象写入响应的 Java 标记。
<req:getFolderAndContactByOidTag oidString="${param.oid}" />
您只需指定要调用的函数的名称,而不是定义内联 onSuccess 函数:
onSuccess: handleResponse,
除 onSuccess 回调外,还可以选择性地指定 onFailure 回调函数。如果未指定 onFailure 回调,则仅会将错误响应记录到 JavaScript 控制台中。