将htmldb_Get转换为apex.server.process

问题描述 投票:0回答:1

我们将顶点从3.2升级到5.1.1。我们在jquery中使用函数htmldb_get。但是在最新版本中,oracle不支持这个功能。现在我们尝试用apex.server.process(oracle推荐)重写相同的内容。有人可以就如何改写下面的陈述提出建议吗?

var a=new htmldb_Get(null,&APP_ID.,"APPLICATION_PROCESS=DUMMY",&APP_PAGE_ID.);
jquery oracle upgrade oracle-apex
1个回答
3
投票

htmldb_Get.get是一个同步api。这意味着当您调用get()时,您将掌握结果并且以下代码可以访问该结果。新的api是异步的。结果将被获取但可能立即可用或不可用。这是人们在迁移到这个新api时最常犯的错误。

您没有发布更多代码,但请注意这很重要。现在你只发布了如何设置htmlDb_Get对象。你还没有打电话给get

例如,假设代码如下所示:

var a=new htmldb_Get(null,&APP_ID.,"APPLICATION_PROCESS=DUMMY",&APP_PAGE_ID.);
var result = a.get();

var result2 = doSomethingWithResult(result);
...
$s('Px_ITEM1', result2);

.get()“简单地”取代apex.server.process是不够的。它不会以这种方式映射或工作。您必须考虑到返回结果可能需要一段时间。 API(以及ajax如何运行)只是实例化一个调用,该调用在将来的某个时刻返回结果。与同步调用(也阻止浏览器的UI)不同,它不会阻止代码(=线程)。因此,如果您更换上述内容并立即调用与结果相关的代码,假设结果存在,则会导致您头疼的时刻如下:“有时它会存在,有时它不存在 - 发生了什么?”。 因此,在apex.server.process上提示“done”函数,该函数在调用完成时执行(=已从服务器返回结果)。

apex.server.process("SOME_PROCESS").done(function(pData){
  var result2 = doSomethingWithResult(pData);
  $s('Px_ITEM1', result2);
});

不是这样的:

apex.server.process("SOME_PROCESS").done(function(pData){
  var result = pData;
});

var result2 = doSomethingWithResult(pData);
$s('Px_ITEM1', result2);

另外,请注意,默认情况下,apex.server.process需要返回JSON字符串。不这样做会导致弹出错误。如果您不想在调用的进程中更改返回值,则可以将预期的数据类型更改为text:

apex.server.process("SOME_PROCESS", {}, {dataType:"text"})
© www.soinside.com 2019 - 2024. All rights reserved.