我想创建一个带有前端HTML + 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")
。
在我的应用程序中,我想使用POST方法。所以请求将是,例如:
xmlhttp.open("POST","http://localhost/cgi-bin/cgiip.exe/WService=wsbroker1/getcustomersJSON_param.p",true);
xmlhttp.send("piCustNum=" + custval);
但我不知道如何在Progress方面获得发送的参数。其实我想发送一个stringify JSON。
任何人都可以帮我吗?谢谢!
答案 0 :(得分:2)
如果您想将JSON数据发布到webspeed程序,请查看WEB-CONTEXT:FORM-INPUT或如果您发布超过32K,请查看WEB-CONTEXT:FORM-LONG-INPUT。
现在......关于阅读JSON数据,它取决于您的OpenEdge版本。在10.2B Progress开始支持JSON,但它非常有限,特别是如果你几乎无法控制如何创建JSON。由于您是创建JSON数据的人,因此它可能适合您。版本11.1有更好的支持JSON,包括SAX流实现。
我们使用的是10.2版,因此我不得不使用this C library将JSON转换为CSV文件。如果您可以在服务器上访问Python,则very easy转换为CSV文件
答案 1 :(得分:0)
对于前端,我建议您使用一些库(如jQuery)来处理ajax的请求,而不是处理使用不同浏览器的复杂性等。您可以使用jQuery的函数如$ .ajax,$ .get或$ .post来发出请求。
可以轻松地在webpeed页面上发布帖子:
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'
);
后端将使用get-value('data')接收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.
这是一个好的开始,希望它有所帮助。
干杯,
答案 2 :(得分:0)
Node提供了一个动态调用Progress Business Logic的库。我希望这会有所帮助。 node4progress