ORACLE APEX PL/SQL进程在onbeforepageunload期间调用AJAX时没有响应
ORACLE APEX PL/SQL Process not responding when called with AJAX during onbeforepageunload
我正在使用Oracle APEX 4.2。我建立了一个PLSQL进程,它被设置为执行"随需应变-当这个进程被AJAX调用时"。此过程旨在更新在加载页面时创建的集合中的两个成员属性。其代码如下:
DECLARE
v_seq_id NUMBER;
BEGIN
--get sequence id
SELECT seq_id into v_seq_id FROM apex_collections
WHERE collection_name = 'THE_COLLECTION' and c001 = :APP_SESSION;
--I've tried uncommenting this script to see if this works, too
--htp.script('alert(''PLSQL Process works'');');
--update first member attribute
apex_collection.update_member_attribute(
p_collection_name =>'THE_COLLECTION',
p_seq => v_seq_id,
p_attr_number => 2,
p_attr_value => 0);
--update second member attribute
apex_collection.update_member_attribute(
p_collection_name =>'THE_COLLECTION',
p_seq => v_seq_id,
p_attr_number => 3,
p_attr_value => sysdate);
END;
当我尝试在页面卸载之前用AJAX/javascript调用此进程时,什么都没有发生。我把这段代码放在我的页面的"Execute on Page Load"部分:
window.onbeforeunload = function(){
//this alert box works, so I know the function is called
alert('Unloading...');
//call the PLSQL process
var get = new htmldb_Get(null,$v('pFlowId'), 'APPLICATION_PROCESS=THE_PROCESS',1234);
get.get();
//this also works, so I know the function completes
alert('end');
};
我用两种方法测试。首先,我在页面中内置了一些逻辑,这些逻辑取决于这些成员属性是否被更新。当我重新加载页面时,它的行为就好像PLSQL进程从未运行过一样。第二,我试过取消注释http。在上面的PLSQL代码中的脚本行,但它也不会执行。
当我尝试在浏览器的F12工具中运行以下命令时,控制台打印"alert('test');"而没有实际显示错误消息:
var get = new htmldb_Get(null,$v('pFlowId'), 'APPLICATION_PROCESS=THE_PROCESS',1234);
get.get();
我也试过用window运行它。Onload,但这似乎也不起作用。
当我将PLSQL进程作为"After Header"进程运行时,http。脚本代码成功地启动了一个警报框,并且该过程似乎可以工作。
有谁知道如何让这个工作与AJAX?我错过了什么明显的东西吗?
看起来问题是在PLSQL进程,毕竟。根据Tom评论的建议,我查看了wwv_flow。显示在我的浏览器的开发工具的网络选项卡。当我查看"详细视图"下的"响应体"选项卡时,我发现该进程正在返回http的结果。脚本命令;它只是没有自己生成警告框。
经过一些故障排除后,我发现我的PLSQL进程中的以下代码不起作用:
--update first member attribute
apex_collection.update_member_attribute(
p_collection_name =>'THE_COLLECTION',
p_seq => v_seq_id,
p_attr_number => 2,
p_attr_value => 0);
我把它改成:
UPDATE apex_collections SET n001 = 0 WHERE c001 = :APP_SESSION and collection_name = 'THE_COLLECTION';
为了使这个工作,我必须执行一个命令来授予我的数据库用户更新权限:
GRANT UPDATE ON apex_collections TO USER
相关文章:
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Javascript/jQuery中的并行Ajax调用
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- node.js请求数据事件未在CORS ajax调用中触发
- 如何从ajax调用返回.wrap()元素
- Ajax调用在Firefox中不会自动响应
- AJAX调用中的非法调用
- 使用AJAX调用将GeoJSON数据拉入传单
- 在MVC 4中,对Controller的Ajax调用为空
- Jquery:对返回JSON数据的php脚本的Ajax调用
- 在ajax调用中阻止来自JS对象的函数
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- 页面加载后的Ajax调用
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- curl和fileget_contents在ajax调用后不起作用
- 在任何AJAX调用之前触发一个javascript函数
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- Ajax调用ERror Cross Origin REquest:在rails中自动完成大学列表
- ASP.NET MVC 3-在ajax调用后,重定向到新页面或生成页面刷新
- 点击功能没有'ajax调用动态元素(Backbone)后无法工作