Php FlexDataGrid未更新

Php FlexDataGrid未更新,php,json,actionscript-3,apache-flex,flex4.6,Php,Json,Actionscript 3,Apache Flex,Flex4.6,问题是: 我有一个有3个索引的手风琴,每个索引包含一个组件。该组件始终是同一个组件(普通数据网格)。这个datagrid通过php和JSON接收他的数据 现在,当我的accordeon的SelectedIndex更改时,我的datagrid中的数据应该更改 这是php查询: $query = "SELECT * FROM gerecht where typeID = " . $typeId; 其中,$typeId是所选的索引 if(isset($_POST['accIndex'])){

问题是: 我有一个有3个索引的手风琴,每个索引包含一个组件。该组件始终是同一个组件(普通数据网格)。这个datagrid通过php和JSON接收他的数据

现在,当我的accordeon的SelectedIndex更改时,我的datagrid中的数据应该更改

这是php查询:

$query = "SELECT * FROM gerecht where typeID = " . $typeId;
其中,
$typeId
是所选的索引

if(isset($_POST['accIndex'])){
    $typeId = mysql_real_escape_string($_POST['accIndex']);
} else {
    $typeId = 1;
}
现在,每当我更改accordio索引时,数据都保持不变。以下是我的flex代码:

    <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:components="components.*" initialize="getData.send();">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <mx:HTTPService id="getData" url="http://localhost/P006_Project/Query.php" 
                        useProxy="false" method="POST" resultFormat="text" result="getPHPData(event)" />
        <mx:HTTPService id="sendData" url="http://localhost/P006_Project/Query.php"
                        useProxy="false" method="POST" result="sendData_resultHandler(event)">
            <mx:request xmlns="">
                <accIndex>
                    {accItems.selectedIndex + 1}
                </accIndex>
            </mx:request>
        </mx:HTTPService>

        <s:ArrayCollection id="acItems" source="{dataArray.source}" />
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.controls.Text;
            import mx.events.FlexEvent;
            import mx.events.IndexChangedEvent;
            import mx.rpc.events.ResultEvent;

            [Bindable]private var dataArray:ArrayCollection = new ArrayCollection();

            private function initDataGrid():void
            {
                getData.send();
            }

            private function getPHPData(event:ResultEvent):void
            {
                var rawArray:Array;
                var rawData:String = String(event.result);
                rawArray = JSON.parse(rawData) as Array;
                dataArray = new ArrayCollection(rawArray);
            }

            protected function accItems_changeHandler(event:IndexChangedEvent):void
            {
                // TODO Auto-generated method stub
                sendData.send();
                trace(acItems);
            }

            protected function sendData_resultHandler(event:ResultEvent):void
            {
                // TODO Auto-generated method stub
                Alert.show(event.result.toString());
            }

        ]]>
    </fx:Script>

    <mx:Accordion id="accItems" creationPolicy="auto" change="accItems_changeHandler(event)">
        <s:NavigatorContent label="Frisdranken">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Bieren (vat)">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
    </mx:Accordion>
</s:Application>

{accItems.selectedIndex+1}
我猜在以下两个方面都出了问题: -php是否接收所选的索引?
-或者flex无法用新数据更新datagrid?

K我终于找到了解决方案。我使用的是2个httpServices,我总是从第一个httpServices接收数据,但这个httpServices不包含参数。所以我把它们合并在一起。产生以下代码:(我还添加了所有其他组件,因此不必关注它们)


{accItems.selectedIndex+1}

K我终于找到了解决办法。我使用的是2个httpServices,我总是从第一个httpServices接收数据,但这个httpServices不包含参数。所以我把它们合并在一起。产生以下代码:(我还添加了所有其他组件,因此不必关注它们)


{accItems.selectedIndex+1}

您是否看到预期值命中“getPHPData”fn?IE'dataArray'包含它应该包含的内容?我的'dataArray'的内容似乎一直保持不变,所以我猜selectedIndex没有到达PHP文件?听起来像这样。因此,下一步是确定值是否被发送。但我没有看到任何参数通过。不确定这是否重要。我添加了一个参数(accIndex)。每次我的手风琴改变索引时,这个应该会被发送。但显然还是有问题。你是如何跟踪“变化指数”的?您正在查看什么事件?您是否看到预期值命中“getPHPData”fn?IE'dataArray'包含它应该包含的内容?我的'dataArray'的内容似乎一直保持不变,所以我猜selectedIndex没有到达PHP文件?听起来像这样。因此,下一步是确定值是否被发送。但我没有看到任何参数通过。不确定这是否重要。我添加了一个参数(accIndex)。每次我的手风琴改变索引时,这个应该会被发送。但显然还是有问题。你是如何跟踪“变化指数”的?你在看什么比赛?
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:components="components.*">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <mx:HTTPService id="sendData" url="http://localhost/P006_Project/Query.php"
                        useProxy="false" method="POST" result="sendData_resultHandler(event)">
            <mx:request xmlns="">
                <accIndex>
                    {accItems.selectedIndex + 1}
                </accIndex>
            </mx:request>
        </mx:HTTPService>

        <s:ArrayCollection id="acItems" source="{dataArray.source}" />
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.controls.Text;
            import mx.events.FlexEvent;
            import mx.events.IndexChangedEvent;
            import mx.rpc.events.ResultEvent;

            [Bindable]private var dataArray:ArrayCollection = new ArrayCollection();

            private function initDataGrid():void
            {
                sendData.send();
            }

            protected function accItems_changeHandler(event:IndexChangedEvent):void
            {
                sendData.send();
            }

            protected function sendData_resultHandler(event:ResultEvent):void
            {
                var rawArray:Array;
                var rawData:String = String(event.result);
                rawArray = JSON.parse(rawData) as Array;
                dataArray = new ArrayCollection(rawArray);
            }

        ]]>
    </fx:Script>

    <mx:Accordion id="accItems" creationPolicy="auto" change="accItems_changeHandler(event)">
        <s:NavigatorContent label="Frisdranken">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Bieren (vat)">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Bieren">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Warme dranken">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Wijnen">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Sterke dranken">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Tapas">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Platos">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Especialidades">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Bocadillos">
            <components:FULLTESTCOMP acItems="{acItems}" creationComplete="{initDataGrid()}"/>
        </s:NavigatorContent>
    </mx:Accordion>
</s:Application>