加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex4.5+php5.2+amfphp通过RemoteObject交互

发布时间:2020-12-15 05:07:46 所属栏目:百科 来源:网络整理
导读:偶尔写写php感觉心情还是蛮舒畅的(Java里的Struts+Hibernate+Spring写久了),写写php才知道,这种被解放的感觉真好。不得不说,php是一种服务器端比较精辟的语言,难怪崇拜者这么多。就来整整flex基于php的交互,看好了,这里要介绍的不是通过flex里面的Ht

偶尔写写php感觉心情还是蛮舒畅的(Java里的Struts+Hibernate+Spring写久了),写写php才知道,这种被解放的感觉真好。不得不说,php是一种服务器端比较精辟的语言,难怪崇拜者这么多。就来整整flex基于php的交互,看好了,这里要介绍的不是通过flex里面的HttpService组件与php交互,而是借助AMFPHP通过RemoteObject方式来交互。
关于amfphp环境的搭建,请参考本人写的amfphp环境搭建教程,当然里面写的比较粗略,有不清粗的可以联系我。
先来看看php端代码
ProductServices.php

<?php
class ProductServices{
    /**
    *query product list
    */
    function getProductList(){
        $link=@mysql_connect("localhost","root","") or die("Could not connect");
        mysql_select_db("compass",$link);
        mysql_query("set names utf8",$link);
        $result = mysql_query("SELECT * FROM product",$link);
        $array=array();
        while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
            array_push($array,$row);
        }
        mysql_free_result($result);
        mysql_close($link);
        return $array;
    }



    function findProductById($id){
        $link=@mysql_connect("localhost",$link);
        $result = mysql_query("SELECT * FROM product where id= ".$id,$row);
        }
        mysql_free_result($result);
        mysql_close($link);
        return $array;
    }

}
?>


在ProductServices.php文件中,定义了一个类ProductServices,里面封装了两个方法,getProductList(),findProductById($id)里面内容很简单,一个是全部查询商品,一个是根据Id查询商品

注意该文件存放的位置C:inetpubwwwrootamfphpservices 这样可以被amfphp的资源管理器检索到




编写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"
               creationComplete="ro.getOperation('getProductList').send()"
               >
    <!-- 
        ro.getOperation('getProductList').send() 
        ro为RemoteObject的Id
        ro.getOperation('getProductList')获取php文件中的方法名,及要调用服务器端的那个方法
        send()发送请求,在send中可传递参数,多个参数之间用逗号分隔,参数名要与服务器端的参数名一致
    -->
    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
        
        <s:RemoteObject id="ro" 
                        destination="amfphp"  
                        source="ProductServices" 
                        fault="getProductList_faultHandler(event)" 
                        result="getProductList_resultHandler(event)"
                        endpoint="http://192.168.3.11/amfphp/gateway.php">
        </s:RemoteObject>
        
        <!--
            RemoteObject中的destination需要与src目录下的services-config.xml中定义的destination的Id保持一致
            source="ProductServices"要调用服务器端的那个php类,如果存在包的话注意包名.类名
            fault 失败时响应的方法
            result 成功时的方法
            endpoint="http://192.168.3.11/amfphp/gateway.php" 正确访问gateway.php的地址
        -->
        
    </fx:Declarations>
    
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;
            import mx.utils.ArrayUtil;
            
            [Bindable]
            internal var dp:ArrayCollection;
            
            
            
            //amfphp请求成功时调用方法
            protected function getProductList_resultHandler(event:ResultEvent):void
            {
                dp=new ArrayCollection(ArrayUtil.toArray(event.result));
            }
            //amfphp请求失败时调用方法
            protected function getProductList_faultHandler(event:FaultEvent):void
            {
                Alert.show("失败了",event.fault.message);                
            }
            
        ]]>
    </fx:Script>
    
    
    <s:layout>
        <s:HorizontalLayout/>
    </s:layout>
    <s:DataGrid width="519" height="292" dataProvider="{dp}" requestedRowCount="4">
        <s:columns>
            <s:ArrayList>
                <s:GridColumn dataField="id" headerText="编号"></s:GridColumn>
                <s:GridColumn dataField="name" headerText="商品名称"></s:GridColumn>
                <s:GridColumn dataField="price" headerText="单价"></s:GridColumn>
                <s:GridColumn dataField="descption" headerText="描述"></s:GridColumn>
            </s:ArrayList>
        </s:columns>
    </s:DataGrid>
    
</s:Application>


必须在flex工程的src目录下存放一个名为services-config.xml

<? version="1.0" encoding="UTF-8"?>
<services-config>
    <services>
        <service id="sabreamf-flashremoting-service"
                 class="flex.messaging.services.RemotingService"
                 messageTypes="flex.messaging.messages.RemotingMessage">
            <destination id="amfphp">
                <channels>
                    <channel ref="my-amfphp"/>
                </channels>
                <properties>
                    <source>*</source>
                </properties>
            </destination>
        </service>
    </services>

    <channels>
        <channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel">
            <endpoint uri="http://192.168.3.11/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>
    </channels>
</services-config>


需要将该文件编译到环境中去


效果图


点我下载代码

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读