Javascript 在页面加载时不断检查Oracle记录
我基本上有一个页面,当加载时,读取Oracle SQL表中的特定记录id,该记录id当前可能不存在,因为将该特定记录插入表中可能需要一分钟的时间 基于此,我需要一种在等待记录存在时显示“加载图像”的方法,因此必须等待。一旦它这样做了,我想删除加载图像并向用户提供记录详细信息。为此,我正在使用Oracle Application Express 4.2 我的问题不是图像的加载/隐藏,而是如何在页面加载过程中不断检查Oracle表中的记录Javascript 在页面加载时不断检查Oracle记录,javascript,jquery,sql,ajax,oracle-apex,Javascript,Jquery,Sql,Ajax,Oracle Apex,我基本上有一个页面,当加载时,读取Oracle SQL表中的特定记录id,该记录id当前可能不存在,因为将该特定记录插入表中可能需要一分钟的时间 基于此,我需要一种在等待记录存在时显示“加载图像”的方法,因此必须等待。一旦它这样做了,我想删除加载图像并向用户提供记录详细信息。为此,我正在使用Oracle Application Express 4.2 我的问题不是图像的加载/隐藏,而是如何在页面加载过程中不断检查Oracle表中的记录 要么我成功接收到记录,然后隐藏图像,要么说在1分钟后,我取消
要么我成功接收到记录,然后隐藏图像,要么说在1分钟后,我取消对记录的检查,并向用户显示一条消息,表明未找到任何记录。对不起,我的英语太差了。我会尽力帮助你
declare
l_cnt number;
begin
select count(*)
into l_cnt
from table1 t
where id = 12345;
if l_cnt > 0 then
htp.p(1);
else
htp.p(0);
end if;
end;
3.3添加javascript代码作为页面加载事件(例如通过动态操作):
Javascript代码:
var myInterval = setInteral(function {
var get = new htmldb_Get(null,$v('pFlowId'),'APPLICATION_PROCESS=GET_MY_ROW',$v('pFlowStepId'));
get.GetAsync(function(pRequest) {
if (pRequest.readyState == 4) {
if (pRequest.responseText == 1) {
alert('Record loaded successfully');
// add function call, hiding your "Loading image" here
clearInterval(myInterval);
}
};
});
get = null;
}, 5000); //check every 5 seconds
setTimeout(function() {
alert('Sorry, no record was found. Try again later.');
clearInterval(myInterval);
}, 60000); // fail after 1 minute
对不起我的英语。我会尽力帮助你
declare
l_cnt number;
begin
select count(*)
into l_cnt
from table1 t
where id = 12345;
if l_cnt > 0 then
htp.p(1);
else
htp.p(0);
end if;
end;
3.3添加javascript代码作为页面加载事件(例如通过动态操作):
Javascript代码:
var myInterval = setInteral(function {
var get = new htmldb_Get(null,$v('pFlowId'),'APPLICATION_PROCESS=GET_MY_ROW',$v('pFlowStepId'));
get.GetAsync(function(pRequest) {
if (pRequest.readyState == 4) {
if (pRequest.responseText == 1) {
alert('Record loaded successfully');
// add function call, hiding your "Loading image" here
clearInterval(myInterval);
}
};
});
get = null;
}, 5000); //check every 5 seconds
setTimeout(function() {
alert('Sorry, no record was found. Try again later.');
clearInterval(myInterval);
}, 60000); // fail after 1 minute
既然NoGotnu已经回答了,我就把这个放在这里: 是否有任何理由通过作业调用该过程?这是创建所需记录的唯一方法吗?这个工作在别的地方叫吗?为什么不在提交了所需页面并显示加载图标后直接调用该过程?当它完成时,用户知道它已经完成了。这将涉及到少很多摆弄,因为你们可以让apex在提交页面上显示一个处理图形。然后,您可以在另一个页面上通知用户该进程尚未运行,他们必须首先执行该操作 第二,虽然NoGotnu的答案会起作用,但我想指出,在apex 4.2中,您应该使用,而不是从未记录过的htmldb_Get构造。是jQuery ajax设置的干净实现。 NoGotnu的代码翻译为:
apex.server.process( "GET_MY_ROW"
, null
, { dataType: text
, success: function(pData){
if (pData == 1) {
clearInterval(myInterval);
alert('Record loaded successfully');
};
}
}
);
虽然调用实际上不需要是异步的,但是可以
另一种选择是实现“长轮询”,而不是每5秒触发一次ajax事件。长轮询只会启动对服务器的调用并等待响应。只要服务器忙,客户端就会等待。要实现这一点,您可以使用dbms\u alert,如您将在作业的plsql代码中发出警报信号,并在ondemand流程代码中注册对警报的兴趣,并使用waitone/any,超时时间为60秒。很长时间的民意测验。既然NoGotnu已经回答了,我就把这个放在这里: 是否有任何理由通过作业调用该过程?这是创建所需记录的唯一方法吗?这个工作在别的地方叫吗?为什么不在提交了所需页面并显示加载图标后直接调用该过程?当它完成时,用户知道它已经完成了。这将涉及到少很多摆弄,因为你们可以让apex在提交页面上显示一个处理图形。然后,您可以在另一个页面上通知用户该进程尚未运行,他们必须首先执行该操作 第二,虽然NoGotnu的答案会起作用,但我想指出,在apex 4.2中,您应该使用,而不是从未记录过的htmldb_Get构造。是jQuery ajax设置的干净实现。 NoGotnu的代码翻译为:
apex.server.process( "GET_MY_ROW"
, null
, { dataType: text
, success: function(pData){
if (pData == 1) {
clearInterval(myInterval);
alert('Record loaded successfully');
};
}
}
);
虽然调用实际上不需要是异步的,但是可以
另一种选择是实现“长轮询”,而不是每5秒触发一次ajax事件。长轮询只会启动对服务器的调用并等待响应。只要服务器忙,客户端就会等待。要实现这一点,您可以使用dbms\u alert,如您将在作业的plsql代码中发出警报信号,并在ondemand流程代码中注册对警报的兴趣,并使用waitone/any,超时时间为60秒。长时间投票。如何创建此记录?这是您启动的过程,还是运行的作业,还是某个过程?嗨,Tom,这实际上是一个从另一个Oracle APEX应用程序启动此作业的包过程,该应用程序随后在后台运行,但在从该应用程序创建此作业后,用户可以从该应用程序,单击一个链接,然后调用我在上面的原始帖子中描述的流程,即调用另一个Oracle APEX应用程序。在页面加载期间,我希望显示加载图像,直到这个作业在我的表中实际存在。希望这是有意义的。谢谢。你是如何制作这张唱片的?这是您启动的过程,还是运行的作业,还是某个过程?嗨,Tom,这实际上是一个从另一个Oracle APEX应用程序启动此作业的包过程,该应用程序随后在后台运行,但在从该应用程序创建此作业后,用户可以从该应用程序,单击一个链接,然后调用我在上面的原始帖子中描述的流程,即调用另一个Oracle APEX应用程序。在页面加载期间,我希望显示加载图像,直到这个作业在我的表中实际存在。希望这是有意义的。谢谢。你好,汤姆!谢谢你的回答。我知道apex.server.process,但我试着给出一个通用方法的例子,它可以在e