首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nslXMLHttpRequest.send在XPiNC中使用失败

nslXMLHttpRequest.send在XPiNC中使用失败
EN

Stack Overflow用户
提问于 2013-01-09 13:27:37
回答 1查看 586关注 0票数 1

我有一个iNotes列表视图对象,它列出了我想要的文档和相关的REST组件。在"OnSelectEntry“方法中,我有以下代码。

代码语言:javascript
复制
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托管在服务器上,则此代码运行良好,但如果我让它在本地运行,则会出现以下故障:

代码语言:javascript
复制
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调用,如下所示。

代码语言:javascript
复制
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文件中得到以下消息。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-10 15:54:45

好的,我不确定如何在客户机上使用REST来完成这个任务,但是您可以进行一个XSP.partialRefreshGet()调用,这应该是可行的。

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

代码语言:javascript
复制
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“中,将其设置为计算以供显示,并具有如下代码:

代码语言:javascript
复制
if(!param.isEmpty()){
    // Do something with the param.unid. Alternatively... 
    return param.unid;

} 

关于这方面的推荐阅读,请参阅"XPages便携命令指南“,第176页。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14236291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档