Kullanıcıya Ait Cevap
29/04/2010 - 11:02:59 cevap (9) Okunma : 3021 Bu yazıyı 0 kişi tuttu.
AS3: XML veriyi POST eden EVENTlar
Merhaba,
POST yöntemini (method) kullanarak XML veriyi bir API'ye POST ediyorum. Veri boyutu yaklaşık 1,2 MB fazla değil, bir disket (biraz nostalji yapalım) kadar. Ancak düğümler (nodes) 1300'ü aşıyor. Ayrıca başka bir XML şablon ile birleşiyor ve gönderdiğim veriler 5 MB. buluyor. Yine fazla değil öyle değil mi!
Ama olaylar (events) başıma olay oldu..:) Çünkü bir döngü içerisinde kullandığım için 1300 küsür olay kuruluyor ve uygulama göçüyor. Biliyorum, yanlış yapıyorum ama bildiğim tek yöntem bu. Flash en fazla 120 küsür olayı kaldırıyor. AS3'e yeni başladığım için olaylar kafam çok almıyor. Aşağıdaki verdiğim kod örneğinden bana bir çıkış yolu aralayabilir misiniz?
var HATALIgiden:Number = 0;
var DÜZGÜNgiden:Number = 0;
var XMLşablon = <ProductRequest>
<Authorize>
<SessionId>FBB1A2FA3AB4CB0DFFD0F3E7A25C5074</SessionId>
</Authorize>
<Action>insert</Action>
<Product>
<Category/>
<Title/>
<Subtitle/>
<Count/>
<Price/>
.
.
.
</Product>
</ProductRequest>;
var apiXML:XML = new XML();
var apiYÜKLEYİCİ:URLLoader = new URLLoader();
apiYÜKLEYİCİ.addEventListener(Event.COMPLETE, XMLçözümle);
apiYÜKLEYİCİ.load(new URLRequest("http://www.domain.com/api.php"));
function XMLçözümle (olay:Event):void {
apiXML = new XML(olay.target.data);
for (var i:int = 0; i <= 99; i++) {
XMLşablon.child("Product").Category.text = apiXML.pr[i].ct.text();
XMLşablon.child("Product").Title = PARÇALA (apiXML.pr[i].pn.text(),true);
XMLşablon.child("Product").Subtitle = PARÇALA (apiXML.pr[i].pn.text(),false);
XMLşablon.child("Product").Count.text = gg.pr[i].apiXML.text();
XMLşablon.child("Product").Price.text = gg.pr[i].apiXML.text();
XMLşablon.child("Product").PhotoTypes.Photo.URL.@bigPhoto = "http://www.domain.net/big/" + gg.pr[i].pp.text();
XMLyolla();
XMLşablon.child("Product").Category = <Category/>;
XMLşablon.child("Product").Count = <ProductCount/>;
XMLşablon.child("Product").Price = <Price/>;
XMLşablon.child("Product").PhotoTypes.Photo.URL = <URL bigPhoto=""/>
}
}
function XMLyolla():void {
var XMLyükleyici:URLLoader = new URLLoader();
XMLyükleyici.addEventListener(Event.COMPLETE, Durumİzle, false, 0, true);
var XMLtalep = new URLRequest("https://api.domain.com/users");
XMLtalep.requestHeaders = [new URLRequestHeader('Content-Type', 'application/xml')]
XMLtalep.data = '<?xml version="1.0" encoding="iso-8859-9"?>' + XMLşablon.toXMLString();
XMLtalep.method = URLRequestMethod.POST;
try {
XMLyükleyici.load(XMLtalep);
} catch (e:Error) {
trace(e);
}
}
function Durumİzle (e:Event):void {
var gidenXML:XML = new XML();
gidenXML = new XML(e.target.data);
if(gidenXML.AckCode=="Failure") {HATALIgiden++; xSay1.text = HATALIgiden.toString();}
if(gidenXML.AckCode=="Success") {DÜZGÜNgiden++; xSay2.text = DÜZGÜNgiden.toString();}
hata1.text = gidenXML.Errors.Error.ErrorCode
hata2.text = gidenXML.Errors.Error.Message
zaman.text = gidenXML.TimeElapsed;
// i++;
}
Kabül ediyorum olay(ları) çok karıştırmışım. Biraz basitleşitirirsek aslında iki olay var:
- apiYÜKLEYİCİ (verinin bulunduğu XML'i yükleyen ve XMLçözümle'ye bağlayan)
- XMLyükleyici (veri şablonla birleştirildikten sonra XMLyolla ile gönderen ve Durumİzle'ye bağlayan)
Ama dikkat etiyseniz ikinci olay(event) aslında bir döngü içinde. Sanırım bu büyük bir yanlış çünkü döngü eğer yüzü aşarsa uygulama kararsızlaşıyor. Aklıma gelen tek çözüm döngüyü kaldırıp "i" değişkenini Durumİzle için de arttırmak? Ama tekrar XMLçözümle'ye gönderemiyorum.
Arkadaşlar bu ilk sorum, lütfen yardım edin. Bu uygulama ile bir haftadır uğraşıyorum ve artık bitirip diğer işlerimi yapmam lazım.
Teşekkürler...
MMIstanbul Blog'undan
Blog Bölümü Blogevi.com'a Taşınıyor
Selam arkadaşlar MMIstanbul'da , tasarımcı ve programcıların blog yazılarını "feedleyerek" MMIstanbul okurlarını MMIstanbul dışın ...
7.500'üncü üyemiz Cem Koç!
Neler Yapılabilir?
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)








Hoş bulduk...
Her türlü öneriye açığım. Ama sorun şu ki XML'i her hangi bir kaynaktan çekip bunu başka bir adrese tek seferde gönderemiyorum. Kaynak XML'in her düğüm içindeki veriyi alıp Flash içindeki şablonla API'nin istediği biçime dönüştürüyorum. Sonra ne kadar düğüm varsa (~1300 adet) o kadar XML'i POST ediyorum.
Aslında API'nin tüm XML'i yükleyebilme özelliği olsaydı beni hiç uğraştırmazdı. Ancak ne yazık ki böyle bir şey söz konusu değil. O yüzden yardımlarınıza ihtiyaç duydum. Aslında şu an işimi görüyor, ama nasıl! Mesela 1000 tane POST için 9 defa döngüyü tekrar kuruyorum. Başta 0 to 99 iken, sonra 100 to 199 yapıyorum. Ama hiç pratik ve profesyonel olmadığını belirtmeliyim...:(
Teşekkürler...