APEX版本:4.1.1.00.23
我有一个穿梭机,根据从选择列表中选择的内容填充正确的站点。每当从选择列表中选择一个项目时,右侧面板上将填充正确的一个或多个项目,但总会添加一个空值。我如何获得null?
班车名称:P51_Shuttle 选择列表名称:P51_Analyst
这是我的代码: HTML标题:
<script type="text/javascript">
function LoadRightPane()
{
var objDQAnalyst = document.getElementById("P51_DQ_ANALYST");
var ajaxRequest = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=get_DQAttributes',0);
ajaxRequest.add('P51_DQ_ANALYST',objDQAnalyst.value);
ajaxResult = ajaxRequest.get();
//alert(ajaxResult);
if(ajaxResult)
{
var shuttleRight = document.getElementById("P51_SHUTTLE_RIGHT");
shuttleRight.options.length = 0;
var attrArray = ajaxResult.split("~colsep~");
for(var i=0; i < attrArray.length; i++) {
shuttleRight.options[i] = new Option(attrArray[i], attrArray[i]);
}
}
else
{
shuttleRight.options.length = 0;
}
ajaxRequest = null;
}
function moveitem(item) {
return;
s_left = document.getElementById("P51_SHUTTLE_TO_LEFT");
db.transaction(function(tx){
tx.executeSql('select distinct DQ_ATTRIBUTE from DQ_MANUAL_EDIT where DQ_ANALYST = ?',[item],function(tx,results)
{
for (var i=0; i < s_left.options.length;i++)
{
if (results.value == s_left.options[i].value)
{
s_left.options[i].selected = true;
g_Shuttlep_v15.move();
}
}
});
});
}
</script>
页面HTML正文属性:
onLoad="Javascript:LoadRightPane();"
Applicaiton / Page进程调用(get_DQAttributes)
DECLARE
L_RETURN VARCHAR2(2000):= NULL ;
BEGIN
BEGIN
FOR rec IN (
select distinct dq_attribute
from DQ_MANUAL_EDIT
where dq_analyst = :P51_DQ_ANALYST
)
LOOP
L_RETURN := L_RETURN || rec.dq_attribute || '~colsep~' ;
END LOOP;
end;
htp.prn(L_RETURN);
END;
答案 0 :(得分:2)
您的ajax进程始终返回以~colsep~
当你在firebug中运行这样的字符串时:
"test1~colsep~".split("~colsep~")
结果将是一个包含2个元素的数组:
["test1", ""]
所以你的NULL元素来自于此。要解决此问题,只需调整ajax进程以使用RTRIM修剪最后一个分隔符。
DECLARE
L_RETURN VARCHAR2(2000):= NULL ;
BEGIN
FOR rec IN ( select distinct dq_attribute
from DQ_MANUAL_EDIT
where dq_analyst = :P51_DQ_ANALYST)
LOOP
L_RETURN := L_RETURN || rec.dq_attribute || '~colsep~' ;
END LOOP;
l_return := rtrim(l_return, '~colsep~');
htp.prn(L_RETURN);
END;
答案 1 :(得分:0)
关于汤姆答案的一切都是正确的。我不得不对该行进行一次修改
l_return := rtrim(l_return, '~colsep~');
运行该代码时,最后两个字母将被删除。如果我在航天飞机上有多个物品,第一个物品就可以了,但第二个物品会被切断。
例如:
使用代码:l_return := rtrim(l_return, '~colsep~');
班车的右侧面板看起来像这样
Score
Da
但实际文字应为
Score
Data
所以我使用了'substr'函数,现在它正在运行
l_return := substr(l_return,0,(length(l_return)-8));
这是整个代码
DECLARE
L_RETURN VARCHAR2(2000):= NULL ;
BEGIN
FOR rec IN ( select distinct dq_attribute
from DQ_MANUAL_EDIT
where dq_analyst = :P51_DQ_ANALYST)
LOOP
L_RETURN := L_RETURN || rec.dq_attribute || '~colsep~' ;
END LOOP;
L_RETURN := substr(l_return,0,(length(l_return)-8));
htp.prn(L_RETURN);
END;
感谢汤姆让我的心理滚动!