我有一个iNotes列表视图对象,它列出了我想要的文档和相关的REST组件。在"OnSelectEntry“方法中,我有以下代码。
var unid = items[0]["@unid"];
var myUrl = "test.nsf/main.xsp/docPathInfo/unid/" + unid;
var h;
if (window.XMLHttpRequest){
h = new XMLHttpRequest();
} else {
h = new ActiveXObject("Microsoft.XMLHTTP");
}
h.onreadystatechange=function() {
if (h.readyState == 4 && h.status == 200) {
var myObject = eval('(' + h.responseText + ')');
var result = dojo.byId("#{id:inputText1}");
result.value = myObject.field1 + " " + myObject.field2;
}
}
h.open("GET",myUrl,false);
h.send();如果NSF托管在服务器上,则此代码运行良好,但如果我让它在本地运行,则会出现以下故障:
uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nslXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://127.0.0.1:50113/xsp/.ibmxspres/.mini/dojo/.en/@Wc&@Eab&@Eya&@lu.js :: anonymous :: 我需要这个来对付客户。这是回客户电话的正确方式吗?
我也尝试过更改ACL访问,但它似乎没有帮助。我还尝试了一个绝对URL,而不是相对URL。
更新
我尝试更改为Dojo调用,如下所示。
var x;
var myCallback = function(data, ioArgs)
{
var myObject = eval('(' + data + ')');
var result = dojo.byId("#{id:inputText1}");
result.value = myObject.field1 + " " + myObject.field2;
}
dojo.xhr("Get", {
url: myUrl,
handleAs: "text",
timeout: 10000,
load: myCallback
});当我运行这段代码时,它在服务器上工作得很好,但是当我在客户机上运行它时,它就不能工作了。我在XPages.log文件中得到以下消息。
1/10/13 10:45 AM: Internal warning: Check access being called outside of a request
1/10/13 10:45 AM: Internal warning: Check access being called without a valid session/database发布于 2013-01-10 15:54:45
好的,我不确定如何在客户机上使用REST来完成这个任务,但是您可以进行一个XSP.partialRefreshGet()调用,这应该是可行的。
因此,对于您的代码,您将执行以下操作:
var partialRefreshOptions = {
"unid" : items[0]["@unid"]
};
// If you want to do any processing client side.
function partialRefreshOnComplete() {}
function partialRefreshOnStart() {};
function partialRefreshOnError() {};
// Make the call.
XSP.partialRefreshGet("#{id:someDummyField}", {
params : partialRefreshOptions,
onStart : partialRefreshOnStart,
onError : partialRefreshOnError,
onComplete : partialRefreshOnComplete}
);然后,在您的"someDummyField“中,将其设置为计算以供显示,并具有如下代码:
if(!param.isEmpty()){
// Do something with the param.unid. Alternatively...
return param.unid;
} 关于这方面的推荐阅读,请参阅"XPages便携命令指南“,第176页。
为了对此进行稍微扩展,您应该使用XSP.partialRefreshGet()而不是XHR,因为AJAX调用如果做得不正确,可能会损坏后端文档。这在同一本书中也有记载。
https://stackoverflow.com/questions/14236291
复制相似问题