2013-10-04 56 views
0

我想用前端HTML + JavaScript和後端Progress4GL創建應用程序。JavaScript前端和Progress4GL後端

我發現此文檔:http://communities.progress.com/pcom/docs/DOC-106147(請參閱介紹AJAX和介紹JSON)。在該示例中描述的請求數據時,它被用來GET方法:

xmlhttp.open("GET", "http://localhost/cgi-bin/cgiip.exe/WService=wsbroker1/getcustomersJSON_param.p?piCustNum="+ custval, true);    
xmlhttp.send(); 

和Progress4GL過程用於獲取它用於get-value("piCustNum")的PARAM。

在我的應用程序中,我想使用POST方法。因此,請求將是,例如:

xmlhttp.open("POST","http://localhost/cgi-bin/cgiip.exe/WService=wsbroker1/getcustomersJSON_param.p",true); 
xmlhttp.send("piCustNum=" + custval); 

但我不知道如何獲得進度側發送的參數。其實我想發送一個stringify JSON。

任何人都可以幫助我嗎?謝謝!

回答

2

如果要將JSON數據發佈到webspeed程序,請檢查WEB-CONTEXT:FORM-INPUT或發佈的數據超過32K,請查看WEB-CONTEXT:FORM-LONG-INPUT。

現在......關於閱讀JSON數據,它取決於您的OpenEdge版本。在10.2B開始支持JSON的進度,但是它非常有限,特別是如果你幾乎無法控制JSON的創建方式。既然你是創建JSON數據的人,它可能適合你。版本11.1有更好的支持JSON,包括一個SAX流實現。

我們使用的是10.2版本,因此我不得不求助於使用this C library將JSON轉換爲CSV文件。如果你有訪問你的服務器上的Python是very easy轉換爲CSV文件

+0

我有Progress11.2。爲了閱讀JSON,我使用了read-json方法:temp-table ttTodo:read-json(「LONGCHAR」,lcJSON)。 – Tenzi

0

對於前端我建議你使用一些庫(如jQuery)來處理ajax的請求,而不是處理與不同瀏覽器一起工作的複雜性等。您可以使用jQuery的函數(如$ .ajax,$ .get或$ .post)來發出請求。

的支撐柱,一個WEBSPEED頁面可以很容易地實現這樣的:

var data = { 
    tt_param: [ { id: 1, des: 'Description 1' } ] 
} 

var params = { data: JSON.stringify(data) } 

$.post(
    'http://<domain>/scripts/cgiip.exe/WService=<service>/ajax.p', 
    params, 
    function (data) { 
    alert('returned:' + data); 
    }, 
    'text' 
); 

而後端將使用獲得價值(「數據」)收到JSON字符串:

{src/web2/wrap-cgi.i} 

def temp-table tt_param no-undo 
    field id as int 
    field des as char. 

def var lc_param as longchar no-undo. 

procedure output-header: 
    output-content-type("text/text"). 
end. 

run output-header. 

assign lc_param = get-value('data'). 

temp-table tt_param:read-json('longchar', lc_param). 

find first tt_param no-error. 

{&OUT} 'Cod: ' tt_param.id ', Des: ' tt_param.des. 

這是一個很好的開始,希望它有幫助。

乾杯,

0

有一個來自Node的庫,用於動態調用Progress Business Logic。我希望這會有所幫助。 node4progress