Harici verileri yüklemeFlash Player 9 ve üstü, Adobe AIR 1.0 ve üstü ActionScript 3.0, harici kaynaklardan veri yüklenmesine yönelik mekanizmalar içerir. Bu kaynaklar metin dosyaları gibi statik içerik veya bir web komut dosyası tarafından oluşturulan dinamik içerik olabilir. Veriler çeşitli yollarla biçimlendirilebilir ve ActionScript verilere ilişkin kod çözme ve erişim işlevleri sağlar. Veri alma işleminin parçası olarak, harici sunucuya veri de gönderebilirsiniz. URLRequest sınıfını kullanmaHarici veri yükleyen çoğu API, gerekli ağ talebinin özelliklerini tanımlamak için URLRequest sınıfını kullanır. URLRequest özellikleriBir URLRequest nesnesinin aşağıdaki özelliklerini her güvenlik sanal alanında ayarlayabilirsiniz:
AIR’de, URLRequest sınıfının yalnızca uygulama güvenliği sanal alanında çalışan AIR içeriğinin kullanabileceği ek özelliklerini ayarlayabilirsiniz. Uygulama sanal alanındaki içerik, yeni URL şemalarını (file ve http gibi standart şemalara ek olarak) kullanarak URL’leri de tanımlayabilir.
Not: HTMLLoader sınıfı, HTMLLoader nesnesi tarafından yüklenen içeriğe ait ayarlara ilişkin özellikler içerir. Ayrıntılar için bkz. HTMLLoader sınıfı hakkında .
URLRequest varsayılanlarını ayarlama (yalnızca AIR)URLRequestDefaults sınıfı URLRequest nesneleri için uygulamaya özel varsayılan ayarlarını tanımlamanızı sağlar. Örneğin, aşağıdaki kod manageCookies ve useCache özellikleri için varsayılan değerleri ayarlar. Tüm yeni URLRequest nesneleri normal varsayılanlar yerine bu özellikler için belirtilen değerleri kullanır: URLRequestDefaults.manageCookies = false; URLRequestDefaults.useCache = false; Not: URLRequestDefaults sınıfı Adobe AIR uygulamasında çalışan içerik için tanımlanır. Bu Flash Player'da desteklenmez.
URLRequestDefaults sınıfı, belirli bir ana bilgisayar için kullanmak üzere varsayılan bir kullanıcı adı ve parola belirlemenizi sağlayan setLoginCredentialsForHost() yöntemini içerir. Yöntemin hostname parametresinde tanımlanan ana bilgisayar, "www.example.com" gibi bir etki alanı veya "www.example.com:80" gibi bir etki alanı ve bir bağlantı noktası numarası olabilir. "example.com", "www.example.com" ve "sales.example.com" öğelerinden her birinin benzersiz ana bilgisayarlar olarak dikkate alındığını unutmayın. Bu kimlik bilgileri, yalnızca sunucu onları istediğinde kullanılır. Kullanıcı kimliği doğrulanmışsa (örneğin, kimlik doğrulama iletişim kutusunu kullanarak), setLoginCredentialsForHost() yöntemini çağırmak, doğrulanmış kullanıcıyı değiştirmez. Aşağıdaki kod, www.example.com adresine gönderilen taleplerde kullanılacak varsayılan kullanıcı adı ve şifreyi belirler: URLRequestDefaults.setLoginCredentialsForHost("www.example.com", "Ada", "love1816$X"); URLRequestDefaults ayarları bir istisna haricinde yalnızca geçerli uygulama etki alanı için geçerlidir. setLoginCredentialsForHost() yöntemine aktarılan kimlik bilgileri, AIR uygulaması içindeki herhangi bir uygulama etki alanında yapılan talepler için kullanılır. Daha fazla bilgi için, Adobe Flash Platformu için ActionScript 3.0 Başvurusu'ndaki URLRequestDefaults sınıfına bakın. URI şemalarıAşağıdaki gibi standart URI şemaları herhangi bir güvenlik sanal alanından yapılan taleplerde kullanılabilir: http: ve https:Standart İnternet URL’leri için bunları kullanın (bir web tarayıcısında kullanıldıkları şekilde). file:Yerel dosya sisteminde bulunan bir dosyanın URL’sini belirtmek için file: kullanın. Örneğin: file:///c:/AIR Test/test.txt AIR’de, uygulama güvenlik sanal alanında çalışan içeriğe ilişkin URL’yi tanımlarken aşağıdaki şemaları da kullanabilirsiniz: app:Yüklü uygulamanın kök dizinine ilişkin bir yol belirlemek için app: öğesini kullanın. Örneğin, aşağıdaki yol yüklenen uygulama dizininin kaynaklar alt dizinine işaret eder: app:/resources Bir AIR uygulaması AIR Debug Launcher (ADL) kullanılarak başlatıldığında, uygulama dizini uygulama açıklayıcı dosyasını içeren dizindir. app-storage:Uygulamanın saklama dizinine ilişkin bir yol belirlemek için app-storage: öğesini kullanın. AIR her yüklenen uygulama için (ve kullanıcı), o uygulamaya özgü verilerin saklanmasına yönelik kullanışlı bir yer olan benzersiz bir uygulama depolama dizini tanımlar. Örneğin aşağıdaki yol, uygulama depolama dizininin ayarlar alt dizininde bulunan bir prefs.xml dosyasını işaret eder: app-storage:/settings/prefs.xml Uygulama depolama dizininin konumu kullanıcı adına, uygulama kimliğine ve yayıncı kimliğine (varsa) bağlıdır:
Not: AIR 1.5.3’ten itibaren, tüm AIR uygulamaları yayıncı kimliğine sahip değildir.
File.applicationStorageDirectory kullanılarak oluşturulan bir File nesnesine ilişkin URL (ve url özelliği) app-storage URI şemasını aşağıdaki şekilde kullanır: var dir:File = File.applicationStorageDirectory; dir = dir.resolvePath("preferences"); trace(dir.url); // app-storage:/preferences mailto:navigateToURL() işlevine aktarılan URLRequest nesnelerindeki mailto şemasını kullanabilirsiniz. Bkz. Başka bir uygulamada URL açma. FileStream veya Sound nesnesi gibi çeşitli nesnelere ilişkin URL isteği tanımlamak için bu URI şemalarından birini kullanan bir URLRequest nesnesini kullanabilirsiniz. Bu şemaları AIR'de çalışan HTML içeriğinde de kullanabilirsiniz; örneğin, bir img etiketinin src niteliğinde kullanabilirsiniz. Ancak, AIR’ye özgü bu URL şemalarını (app: ve app-storage:) yalnızca uygulama güvenlik sanal alanındaki içerikte kullanabilirsiniz. Daha fazla bilgi için bkz. AIR güvenliği. Yasaklı URI şemaları (AIR’de)Bazı API'ler, içeriği bir web tarayıcısında başlatmanıza olanak verir. Güvenlik nedenleriyle, AIR’de bu API’leri kullanırken bazı URI şemalarının kullanılmasına izin verilmez. İzin verilmeyen şemaların listesi, API'yi kullanan kodun güvenlik sanal alanına bağlıdır. Ayrıntılar için bkz. Başka bir uygulamada URL açma . URL değişkenlerini ayarlamaDeğişkenleri URL dizesine doğrudan ekleyebilmenize rağmen, bir talep için gereken herhangi bir değişkeni tanımlamak için URLVariables sınıfını kullanmak daha kolay olabilir. Bir URLVariables nesnesine parametre eklemenin üç yolu vardır:
Aşağıdaki örnekte üç yöntem de gösterilmekte ve bir URLRequest nesnesine nasıl değişken atanacağı örneklendirilmektedir: var urlVar:URLVariables = new URLVariables( "one=1&two=2" ); urlVar.decode("amp=" + encodeURIComponent( "&" ) ); urlVar.three = 3; urlVar.amp2 = "&&"; trace(urlVar.toString()); //amp=%26&2=%26%26&one=1&two=2&three=3 var urlRequest:URLRequest = new URLRequest( "http://www.example.com/test.cfm" ); urlRequest.data = urlVar; Değişkenleri URLVariables yapıcısı içinde veya URLVariables.decode() yönteminde tanımlarken, bir URI dizesinde özel bir anlamı olan karakterleri URL kodlamasına tabi tuttuğunuzdan emin olun. Örneğin, bir parametre adı ya da değerde ampersan kullandığınızda, ampersanı &’den %26’ya değiştirerek kodlamanız gerekir, çünkü ampersan parametreler için bir sınırlayıcı olarak hareket eder. En üst seviye encodeURIComponent() işlevi bu amaçla kullanılabilir. URLLoader sınıfını kullanmaURLLoader sınıfı, bir sunucuya talep göndermenize ve verilen bilgilere ulaşmanıza izin verir. URLLoader sınıfını yerel dosya erişimine izin verilen bağlamlardaki (Flash Player dosya sistemiyle yerel sanal alanı ve AIR uygulaması sanal alanı gibi) yerel dosya sistemi üzerinde bulunan dosyalara erişmek için de kullanabilirsiniz. URLLoader sınıfı bir URL'den metin, ikili veri veya URL olarak kodlanmış değişkenler olarak veri indirir. URLLoader sınıfı complete, httpStatus, ioError, open, progress ve securityError gibi olaylar gönderir. ActionScript 3.0 olay işleme modeli, LoadVars.onData, LoadVars.onHTTPStatus ve LoadVars.onLoad olay işleyicilerini kullanan ActionScript 2.0 modelinden büyük ölçüde farklıdır. ActionScript 3.0’da olayları işleme hakkında daha fazla bilgi edinmek için bkz. Olayları işleme İndirilen veriler, indirme işlemi tamamlanana kadar kullanılamaz. progress olayının gönderilmesini dinleyerek indirmenin ilerlemesini (yüklenen baytlar ve toplam bayt) denetleyebilirsiniz. Ancak, bir dosya yeterince hızlı yüklenirse progress olayı gönderilmeyebilir. Bir dosya başarıyla yüklendiğinde complete olayı gönderilir. URLLoader dataFormat özelliğini ayarlayarak, verileri metin, ham ikili veri veya bir URLVariables nesnesi olarak alabilirsiniz. URLLoader.load() yöntemi (ve isteğe bağlı olarak URLLoader sınıfının yapıcısı), URLRequest nesnesi olan tek bir parametre (request) alır. URLRequest nesnesi, hedef URL, istek yöntemi (GET veya POST), ek başlık bilgileri ve MIME türü gibi tek bir HTTP isteğinin tüm bilgilerini içerir. Örneğin, sunucu tarafı komut dosyasına bir XML paketi yüklemek için aşağıdaki kodu kullanabilirsiniz: var secondsUTC:Number = new Date().time; var dataXML:XML = <clock> <time>{secondsUTC}</time> </clock>; var request:URLRequest = new URLRequest("http://www.yourdomain.com/time.cfm"); request.contentType = "text/xml"; request.data = dataXML.toXMLString(); request.method = URLRequestMethod.POST; var loader:URLLoader = new URLLoader(); loader.load(request); Önceki kod parçası, sunucuya gönderilecek XML paketini içeren dataXML adında bir XML örneği oluşturur. Örnek, URLRequest contentType özelliğini "text/xml" olarak ayarlar ve XML belgesini URLRequest data özelliğine atar. Son olarak, örnek bir URLLoader nesnesi oluşturup load() yöntemini kullanarak uzak komut dosyasına talebi gönderir. URLStream sınıfını kullanmaURLStream sınıfı indirme verileri geldiğinde bu verilere erişim sağlar. URLStream sınıfı ayrıca, indirmeyi tamamlamadan önce bir akışı kapatmanıza olanak verir. İndirilen veri, ham ikili veri olarak mevcuttur. Bir URLStream nesnesinden veri okurken, okumadan önce yeterli verinin olup olmadığını belirlemek için bytesAvailable özelliğini kullanın. Mevcut olandan daha fazla veri okumaya çalışırsanız, EOFError istisnası atılır. httpResponseStatus olayı (AIR)Adobe AIR’de, URLStream sınıfı httpStatus olayına ek olarak bir httpResponseStatus olayı gönderir. httpResponseStatus olayı herhangi bir yanıt verisinden önce ulaştırılır. httpResponseStatus olayı (HTTPStatusEvent sınıfıyla ifade edilen), yanıtın döndüğü kaynak URL olan responseURL özelliğini ve yanıtın döndürdüğü yanıt başlıklarını temsil eden URLRequestHeader nesnesinin bir dizisi olan responseHeaders özelliğini içerir. Harici belgelerden veri yüklemeDinamik uygulamalar oluşturduğunuzda, harici dosyalardan veya sunucu tarafı komut dosyalarından veri yüklemek faydalı olabilir. Bu, uygulamanızı düzenlemeniz veya yeniden derlemeniz gerekmeden dinamik uygulamalar oluşturmanıza olanak sağlar. Örneğin, bir “günün ipucu” uygulaması oluşturuyorsanız, bir veritabanından rastgele bir ipucunu alıp her gün bir metin dosyasına kaydeden sunucu tarafı komut dosyası yazabilirsiniz. Daha sonra uygulamanız, her seferinde veritabanını sorgulamak yerine statik metin dosyasının içeriklerini yükleyebilir. Aşağıdaki kod parçası, params.txt adında harici bir metin dosyasının içeriklerini yükleyen bir URLRequest ve URLLoader nesnesi oluşturur: var request:URLRequest = new URLRequest("params.txt"); var loader:URLLoader = new URLLoader(); loader.load(request); Varsayılan olarak, bir istek yöntemi tanımlamazsanız, Flash Player ve Adobe AIR uygulaması HTTP GET yöntemini kullanarak içeriği yükler. Verileri POST yöntemini kullanarak göndermek için, aşağıdaki kodun gösterdiği gibi URLRequestMethod.POST statik sabitini kullanarak request.method özelliğini POST olarak ayarlayın:
var request:URLRequest = new URLRequest("sendfeedback.cfm"); request.method = URLRequestMethod.POST; Çalışma zamanında yüklenen params.txt harici belgesi aşağıdaki verileri içerir: monthNames=January,February,March,April,May,June,July,August,September,October,November,December&dayNames=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday Dosya iki parametre içerir, monthNames ve dayNames. Her parametre, virgülle ayrılmış dizeler halinde ayrıştırılmış bir liste içerir. String.split() yöntemini kullanarak bu listeyi bir diziye ayrıştırabilirsiniz. Harici veri dosyalarında değişken adı olarak ayrılmış sözcükleri veya dil yapılarını kullanmayın, aksi takdirde bu, kodunuzun okunmasını ve hatalarının ayıklanmasını daha güçleştirir. Veriler yüklendiğinde complete olayı gönderilir ve aşağıdaki kodun gösterdiği gibi, harici belgenin içindekiler URLLoader data özelliğinde kullanıma hazırdır:
function completeHandler(event) { var loader2 = event.target; air.trace(loader2.data); } Uzak belge ad-değer çiftleri içeriyorsa, yüklenen dosyanın içeriğini aşağıdaki gibi ileterek URLVariables sınıfı aracılığıyla verileri ayrıştırabilirsiniz: private function completeHandler(event:Event):void { var loader2:URLLoader = URLLoader(event.target); var variables:URLVariables = new URLVariables(loader2.data); trace(variables.dayNames); } Harici dosyadan her ad-değer çifti URLVariables nesnesinde bir özellik olarak oluşturulmuştur. Önceki kod örneğinde yer alan değişkenler nesnesindeki her özellik, bir dize olarak değerlendirilir. Ad-değer çiftinin değeri bir öğeler listesiyse, dizeyi aşağıdaki gibi String.split() yöntemini çağırarak bir diziye dönüştürebilirsiniz: var dayNameArray:Array = variables.dayNames.split(","); Harici metin dosyalarından sayısal veriler yüklüyorsanız, int(), uint() veya Number() gibi bir üst düzey işlev kullanarak değerleri sayısal değerlere dönüştürün. Uzak dosyanın içeriklerini bir dize olarak yükleyip yeni bir URLVariables nesnesi oluşturmak yerine, URLLoader.dataFormat özelliğini URLLoaderDataFormat sınıfında bulunan statik özelliklerden birine ayarlayabilirsiniz. URLLoader.dataFormat özelliği için üç olası değer şunlardır:
Aşağıdaki kod, URLLoader.dataFormat özelliğinin URLLoaderDataFormat.VARIABLES olarak ayarlanmasının, yüklenen verileri nasıl otomatik olarak bir URLVariables nesnesine ayrıştırmanıza olanak sağladığını gösterir: package { import flash.display.Sprite; import flash.events.*; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; public class URLLoaderDataFormatExample extends Sprite { public function URLLoaderDataFormatExample() { var request:URLRequest = new URLRequest("http://www.[yourdomain].com/params.txt"); var variables:URLLoader = new URLLoader(); variables.dataFormat = URLLoaderDataFormat.VARIABLES; variables.addEventListener(Event.COMPLETE, completeHandler); try { variables.load(request); } catch (error:Error) { trace("Unable to load URL: " + error); } } private function completeHandler(event:Event):void { var loader:URLLoader = URLLoader(event.target); trace(loader.data.dayNames); } } } Not: URLLoader.dataFormat için varsayılan değer URLLoaderDataFormat.TEXT şeklindedir.
Aşağıdaki örneğin gösterdiği gibi, harici bir dosyadan XML yüklemek, URLVariables yüklemekle aynıdır. Bir URLRequest örneği ile bir URLLoader örneği oluşturabilir ve bunları uzak bir XML belgesini indirmek için kullanabilirsiniz. Dosya tamamen indirildiğinde, Event.COMPLETE olayı gönderilir ve harici dosyanın içerikleri, XML yöntemlerini ve özelliklerini kullanarak ayrıştırabileceğiniz bir XML örneğine dönüştürülür. package { import flash.display.Sprite; import flash.errors.*; import flash.events.*; import flash.net.URLLoader; import flash.net.URLRequest; public class ExternalDocs extends Sprite { public function ExternalDocs() { var request:URLRequest = new URLRequest("http://www.[yourdomain].com/data.xml"); var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, completeHandler); try { loader.load(request); } catch (error:ArgumentError) { trace("An ArgumentError has occurred."); } catch (error:SecurityError) { trace("A SecurityError has occurred."); } } private function completeHandler(event:Event):void { var dataXML:XML = XML(event.target.data); trace(dataXML.toXMLString()); } } } Harici komut dosyalarıyla iletişim kurmaHarici veri dosyaları yüklemenin yanı sıra, sunucu tarafı komut dosyasına değişkenler gönderip sunucunun yanıtını işlemek için de URLVariables sınıfını kullanabilirsiniz. Bu örneğin, bir oyun programlıyor ve kullanıcının puanını yüksek puanlar listesine eklenip eklenmeyeceğinin hesaplanması için sunucuya göndermek ve hatta kullanıcının oturum açma bilgilerini doğrulama için sunucuya göndermek istiyorsanız, kullanışlı bir özelliktir. Sunucu tarafı komut dosyası kullanıcı adı ve parolayı işleyebilir, veritabanına karşı doğrulayabilir ve kullanıcının girdiği kimlik bilgilerinin geçerli olup olmadığına ilişkin teyit döndürebilir. Aşağıdaki kod parçası, name adında yeni bir değişken oluşturan variables adında bir URLVariables nesnesi oluşturur. Daha sonra, değişkenlerin gönderileceği sunucu tarafı komut dosyasının URL'sini belirten bir URLRequest nesnesi oluşturulur. Daha sonra, değişkenleri bir HTTP POST isteği olarak göndermek üzere URLRequest nesnesinin method özelliğini ayarlarsınız. URLVariables nesnesini URL isteğine eklemek için, URLRequest nesnesinin data özelliğini önceden oluşturulan URLVariables nesnesine ayarlarsınız. Son olarak, URLLoader örneği oluşturulur ve isteği başlatan URLLoader.load() yöntemi çağrılır. var variables:URLVariables = new URLVariables("name=Franklin"); var request:URLRequest = new URLRequest(); request.url = "http://www.[yourdomain].com/greeting.cfm"; request.method = URLRequestMethod.POST; request.data = variables; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.VARIABLES; loader.addEventListener(Event.COMPLETE, completeHandler); try { loader.load(request); } catch (error:Error) { trace("Unable to load URL"); } function completeHandler(event:Event):void { trace(event.target.data.welcomeMessage); } Aşağıdaki kod, önceki örnekte kullanılan Adobe ColdFusion® greeting.cfm belgesinin içeriklerini barındırır: <cfif NOT IsDefined("Form.name") OR Len(Trim(Form.Name)) EQ 0> <cfset Form.Name = "Stranger" /> </cfif> <cfoutput>welcomeMessage=#UrlEncodedFormat("Welcome, " & Form.name)# </cfoutput> |
|