ajax重新渲染时获得新值

Getting new value when ajax re-renders

本文关键字:新值 新渲染 ajax      更新时间:2023-09-28

我的代码运行良好,但我真的无法清楚地理解它。

有人能给我解释一下吗。

这是我的代码:

<script type="text/javascript">
    var portletNamespace = '#<portlet:namespace/>'':formId'':';
    $(portletNamespace + 'drpCategory').live('change', function () {
        alert('#{myController.simpleString}');
        $(portletNamespace + 'hiddenValue').ready(function () {
            alert($(portletNamespace + 'hiddenValue').val());
        });
    });
</script>
<h:inputText id="hiddenValue" value="#{myController.simpleString}" />
<h:selectOneMenu id="drpCategory">
    <f:selectItem itemLabel="Chọn thủ tục" itemValue="#{null}" />
    <f:selectItems value="#{myController.listCate}" var="item" itemLabel="#{item.cateNane}"
    itemValue="#{item.cateId}" />
    <f:ajax event="valueChange" render="hiddenMap " listener="#{myController.changeCategory}"
    />
</h:selectOneMenu>

在我更改drpCategory中的项目后,javascript会先通知空字符串,然后通知simpleString的实际值。但是,如果我删除第一个警报代码,第二个将显示旧值(在ajax渲染之前)

例如,如果我删除第一个警报代码。首先,hiddenValue为空,更改drpCategory值,hiddenValue更改为'a',但javascript警报为空,第二次当我更改drpCategory时,hiddenValue更改为'b',但仍显示'a'

编辑:啊,我发现了一些东西,我改成了:

 <script type="text/javascript">
    var portletNamespace = '#<portlet:namespace/>'':formId'':';     
    $(portletNamespace+'drpCategory').live('change', function(){
        setTimeout('myFunc()', 500);    
    });
    function myFunc(){
            $(portletNamespace+'hiddenValue').ready(function(){
                alert($(portletNamespace+'hiddenValue').val());
            });
    }
   </script> 

如果我正确理解你的场景。。

更改

<f:ajax event="valueChange" render="hiddenMap " listener="#{myController.changeCategory}"
/>

进入

<f:ajax onevent="callThisMethodAfterValueIsUpdated" event="valueChange" render="hiddenMap " listener="#{myController.changeCategory}"
/>

在你的js中添加这个

var portletNamespace = '#<portlet:namespace/>'':formId'':'; 
function callThisMethodAfterValueIsUpdated(data) {
    if (data.status === 'success') {
        alert($(portletNamespace+'hiddenValue').val());
    }
}

依赖setTimeout是错误的,因为它可能会随时间的服务器/流量而变化。。。