httpservice asynctoken و asyncresponder المثال
-
19-09-2019 - |
سؤال
أين يمكنني العثور على مثال على تطبيق Flex الذي ينفذ HTTSService يسمى بشكل غير متزامن بواسطة Asynctoken و Asyncresponder؟ شكرا لك مقدما
إرسال HTTSService سلسلة مثل هذا مع تردد معين:
الصف # العمود # رقم # الصف # العمود # رقم # الصف # العمود # رقم # ....
رمز تحرير:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application creationComplete="onCreationComplete()"
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.remoting.RemoteObject;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.http.mxml.HTTPService;
import mx.rpc.AsyncRequest;
import mx.rpc.AsyncResponder;
import mx.rpc.AsyncToken;
import mx.collections.ArrayCollection;
import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
import mx.controls.AdvancedDataGrid;
import mx.controls.Alert;
import mx.rpc.IResponder;
[Bindable]
public var dataList:ArrayCollection;
public function getResults(source:String) : ArrayCollection {
var ac:ArrayCollection = new ArrayCollection();
var data:Array = source.split('#');
for (var i:int = 0; i < data.length; i += 3) {
var dataObj:Object = {row: data[i], column: data[i+1], value: data[i+2]};
ac.addItem(dataObj)
}
return ac;
}
public function result(event:ResultEvent):void{
dataList = getResults( String(event.result) );
}
public function fault(event:FaultEvent) : void {
dataList = getResults(String(event.fault));
}
public function onCreationComplete():void
{
var service:HTTPService = new HTTPService();
service.url = "http://10.15.20.75/server4flex/servlet/Datagen";
service.resultFormat = "text";
var token:AsyncToken = service.send(dataList);
token.addResponder(new mx.rpc.Responder(result, fault));
}
]]>
</mx:Script>
<mx:AdvancedDataGrid id="dg"
dataProvider="{result}"
liveScrolling="true"
x="10" y="10" width="621"
verticalScrollPolicy="on"
>
<mx:columns>
<mx:AdvancedDataGridColumn dataField="row"
headerText="Riga"/>
<mx:AdvancedDataGridColumn dataField="column"
headerText="Colonna"/>
<mx:AdvancedDataGridColumn dataField="value"
headerText="Valore"/>
</mx:columns>
</mx:AdvancedDataGrid>
</mx:Application>
المحلول
أنا لا أعرف ما الذي تبحث عنه حقا ولكن هنا أو هنا على سبيل المثال، هي طريقة للاستخدام AsyncToken
و AsyncResponder
تعديل:
- لك
dataList
يجب ان تكونBindable
- لا تحدد
dataList
على كل تكرار حلقة - عليك أن تتصل بك وظيفة
getResults
في مرحلة ما عندما تكون نتائجك جاهزة event
فيresult
وظيفة هيEvent
ولكن أيضاResultEvent
حيث يوجدresult
الحقل الذي يحتوي على البيانات الخاصة بك
والتي قد تبدو مثل هذا (غير مختبر):
[Bindable]
public var dataList:ArrayCollection;
public function getResults(source:String) : ArrayCollection {
var ac:ArrayCollection = new ArrayCollection();
var data:Array = source.split('#');
for (var i:int = 0; i < data.length; i += 3) {
ac.addItem( {row: data[i], column: data[i+1], value: data[i+2]} );
}
return ac;
}
private function result(event:ResultEvent) : void {
dataList = getResults( String(event.result) );
}
Edit2.:
هذا مثال يعمل باستخدام ملف PHP بسيط للحصول على البيانات التي تعمل على خادم ويب محلي.
الجزء المرن
<?xml version="1.0" encoding="utf-8"?>
<mx:Application creationComplete="onCreationComplete()"
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.AsyncToken;
import mx.rpc.Responder;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.mxml.HTTPService;
[Bindable]
public var dataList : ArrayCollection;
public function getResults(source : String) : ArrayCollection {
var ac : ArrayCollection = new ArrayCollection();
var data : Array = source.split('#');
for (var i : int = 0; i < data.length; i += 3) {
var dataObj : Object = {row: data[i], column: data[i + 1], value: data[i + 2]};
ac.addItem(dataObj)
}
return ac;
}
public function result(event : ResultEvent) : void {
dataList = getResults(String(event.result));
}
public function fault(event : FaultEvent) : void {
//here do whatever you want to manage the error you received
}
public function onCreationComplete() : void
{
var service : HTTPService = new HTTPService();
service.url = "http://127.0.0.1/getDatas.php";
service.resultFormat = "text";
var token : AsyncToken = service.send();
token.addResponder(new mx.rpc.Responder(result, fault));
}
]]>
</mx:Script>
<mx:AdvancedDataGrid id="dg"
dataProvider="{dataList}"
liveScrolling="true"
x="10" y="10" width="621"
verticalScrollPolicy="on"
>
<mx:columns>
<mx:AdvancedDataGridColumn dataField="row"
headerText="Riga"/>
<mx:AdvancedDataGridColumn dataField="column"
headerText="Colonna"/>
<mx:AdvancedDataGridColumn dataField="value"
headerText="Valore"/>
</mx:columns>
</mx:AdvancedDataGrid>
</mx:Application>
PHP الجزء (getdatas.php)
<?php print "1#c1#v1#2#c2#v2#3#c3#v3"?>
نصائح أخرى
private function onCreationComplete():void
{
var service:HTTPService = new HTTPService();
service.url = "http://www.google.com";
service.resultFormat = "text";
var token:AsyncToken = service.send();
token.addResponder(new mx.rpc.Responder(result, fault));
}
private function result(event:Event):void
{
trace(1, event);
}
private function fault(event:Event):void
{
trace(2, event);
}
وجدت هنا.
لا تنتمي إلى StackOverflow