0

我想用前端 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 端获取发送的参数。实际上我想发送一个字符串化 JSON。

谁能帮我这个?谢谢!

4

3 回答 3

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 版本,所以我不得不求助于使用这个 C 库将 JSON 转换为 CSV 文件。如果您可以访问服务器上的 Python,则可以很容易地转换为 CSV 文件

于 2013-10-04T21:12:46.843 回答
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'
);

后端将使用 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.

这是一个很好的起点,希望对您有所帮助。

干杯,

于 2013-10-16T18:56:08.867 回答
0

有一个来自 Node 的库,用于动态调用 Progress Business Logic。我希望这会有所帮助。 节点4进度

于 2015-08-12T08:02:41.160 回答