2013-01-09 27 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

相關問題