2012-07-12 104 views
1

我正在處理需要將數據發送到遠程Cognos服務器以運行幾個報告的GWT應用程序。我使用原生JavaScript代碼發送數據,但Cognos服務器不知道如何接收所有數據,我們發送大量數據作爲URL中的參數。這是代碼:gwt使用原生javascript發送遠程服務器的POST請求失敗

private static native void openReportWindow(String action, String uiObject, String reportName, String reportParams) /*-{ 
    var form = document.createElement("form"); 
    form.setAttribute("method", "POST"); 
    form.setAttribute("action", action); 
    form.setAttribute("target", "reports"); 

    var reportValues = new Array(); 
    reportValues = reportParams.split('&'); 

    for(var i=0;i<reportValues.length;i++) { 
     var tempArr = new Array(); 
     tempArr = reportValues[i].split('='); 
     var hiddenField = document.createElement("input"); 
     hiddenField.setAttribute("name", tempArr[0]); 
     hiddenField.setAttribute("value", tempArr[1]); 
     form.appendChild(hiddenField); 
    } 

    document.body.appendChild(form); 

    // open a new window to display the reports 
    window.open(action, 'reports', 'scrollbars=yes,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no'); 
    form.submit(); 

}-*/; 

有沒有更好的方法來做到這一點?

感謝您的幫助。

+0

您可以從GWT的Java代碼,而不是下降到JS的請求,看一看有關GWT RPC例子與JSON服務器通話。 – John3136 2012-07-12 23:13:18

+0

謝謝John3136。我在網上做了一個粗略的研究,但似乎JSONP不能用於發送POST請求,這是真的嗎?我需要發送POST請求,因爲我的數據超過了2083個字符 - 需要將其作爲URL參數發送到Cognos服務器。請注意,我不需要處理來自服務器的響應,我只需要發送單向請求。謝謝! – beebris 2012-07-13 00:24:10

+0

你可以看看[Post data to JsonP] [1]的問題。 [1]:http://stackoverflow.com/questions/2699277/post-data-to-jsonp – Arcadien 2012-07-16 09:31:36

回答

1

您不應該使用JSNI來創建和提交表單。您可以使用完整的Java API來完成此操作。

無論如何,如果您使用的是JSNI,請確保使用$ doc而不是文檔,使用$ wnd而不是窗口來使用正確的窗口和文檔對象。 (這與不同的引導程序和GWT以及代碼的加載方式有關)有時,窗口對象將指向一個子框架。 $ wnd和$ doc由編譯器設置,並始終指向正確的一個。

記住,沒有必要去爲JSNI你正在嘗試做的...

+0

我還是個新手。 JSNI還有其他的替代方案嗎?我已經看過使用RequestBuilder或XMLHttpRequest,但兩者都不起作用,因爲SOP策略。我接受任何建議......謝謝你堆! – beebris 2012-07-15 22:39:04

相關問題