Xpages nslXMLHttpRequest.send在XPiNC中使用时失败

Xpages nslXMLHttpRequest.send在XPiNC中使用时失败,xpages,xpinc,Xpages,Xpinc,我有一个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 ActiveXO

我有一个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 :: 
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}
);
我需要这个来处理客户。这是给客户回电话的正确方法吗

我也尝试过更改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

好的,我不确定如何在客户机上使用REST,但是可以进行XSP.partialRefreshGet()调用,这应该可以工作

因此,对于您的代码,您将执行以下操作:

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 :: 
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”中将其设置为computed以便显示,并使用如下代码:

if(!param.isEmpty()){
    // Do something with the param.unid. Alternatively... 
    return param.unid;

} 
建议阅读本手册的第176页“XPages便携式命令指南”


为了对此稍作扩展,您应该使用XSP.partialRefreshGet()而不是XHR,因为如果不正确执行AJAX调用,可能会损坏后端文档。这也记录在同一本书中

您是否尝试过改用dojo ajax函数?您是从非XPage调用XPage视图ajax吗?我尝试了Dojo调用,但得到了另一个错误。我已经更新了文件。我想我现在懂多了。您的nsf位于本地,您正试图向同一台本地计算机上的不同数据库发出ajax请求?除非您的机器上有一个本地运行的domino服务器,否则这将不起作用。您可以使用ssjs通过XPages部分刷新来显示所需的数据,而不是发出ajax请求?谢谢!这很好用。它也让我的生活变得更轻松,因为我不再需要对eval()进行消毒。我使用计算的数据,而不是显示的计算数据。