2013-01-09 26 views
1

我有一个iNotes List视图对象,它列出了我想要的文档以及相关的REST组件。在“OnSelectEntry”方法中,我有以下代码。nslXMLHttpRequest.send在XPiNC中使用时失败

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。

[更新]

我试图改变到道场呼叫代替如下。

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 
+0

您是否尝试过使用dojo ajax函数?你是否从非XPage调用XPage视图ajax? –

+0

我尝试了Dojo调用,但是这给我一个不同的错误。我更新了文档。 – Herty

+0

我想我现在明白了一点。你有nsf坐在本地,并且你试图向同一本地机器上的不同数据库发出ajax请求?除非你的计算机上有本地运行的多米诺骨牌服务器,否则这将不起作用。也许你可以使用ssjs来通过XPage局部刷新来表达你需要的数据,而不是做一个ajax请求? –

回答

2

OK,我不知道你将如何在客户端使用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调用不正确,AJAX调用会破坏后端文档。这也记录在同一本书中。

+0

谢谢!这工作完美。此外,它使我的生活更容易一些,因为我不需要再对eval()进行消毒。我使用计算的数据而不是显示计算。 – Herty

相关问题