2012-04-16 7 views
0

に追加しています。私の問題は非常に単純な修正ですが、可能な限り詳しく説明します。AS3&MySQL - 出力された文字列を変数

基本的には、MySQLでPHPを使用してGETを使用してFlashファイルに情報を送信しています。

FlashVarsを使用すると、これでユーザーのIDを取得できました。データベースにアクセスし、情報をHTMLページに返すPHPスクリプトに質問/検索を送信できます。ただこれは「不明」

を返し

var usr_name = get_user_name(id) || 'Unknown'; // "Unknown" should just be for offline use. 

が、この:私は今、やりたい何

は、例えばフラッシュ内の変数に戻すhtmlページに送信された情報を追加することです

:使用する関数:私はこのエラーを取得する(||「不明」)またはステートメントアウトしてやろうちょうどその時

 public function get_user_name(usr_id){ 
       loadData('search.php',"quest=name",'usr_id='+usr_id); 
     } 

private function loadData(page_Name='search.php',get1='g1=1',get2='g2=2',get3='g3=3'):void { 
      var randomParam:String = "?p=" + Math.floor(Math.random() * (10000000)); 
      var create_URL = (URL + page_Name + randomParam + '&'+ get1 + '&' + get2 + '&' + get3) ; 
      trace(create_URL); 

      _loader = new URLLoader(); 
      _request = new URLRequest(create_URL);   
      _request.method = URLRequestMethod.POST; 
      _loader.addEventListener(Event.COMPLETE, onLoadData); 
      _loader.addEventListener(IOErrorEvent.IO_ERROR, onDataFiledToLoad); 
      _loader.addEventListener(IOErrorEvent.NETWORK_ERROR, onDataFiledToLoad); 
      _loader.addEventListener(IOErrorEvent.VERIFY_ERROR, onDataFiledToLoad); 
      _loader.addEventListener(IOErrorEvent.DISK_ERROR, onDataFiledToLoad); 
      _loader.load(_request); 
     } 

public function onLoadData(e:Event):String { 
      return(e.target.data); 
     } 

これは、すべてのように見えるが罰金の作品

TypeError: Error #2007: Parameter text must be non-null. 
    at flash.text::TextField/set text() 
    at App/frame1() 

URLをウェブブラウザに入力するだけで、名前が出力されます。

なぜこのような問題があるのか​​わかりません。

おかげ イーライ

答えて

0
public function onLoadData(e:Event):String { 

      return(e.target.data); 
     } 

あなたが変数に応答文字列を返すために上記の機能を期待するなら、あなたは間違っています。

onLoadDataに変数自体を入力させる必要があります。この方法を試してみてください:

var usr_name = 'Unknown'; 

get_user_name(id); 


function get_user_name(usr_id) { 

    loadData('search.php',"quest=name",'usr_id='+usr_id); 
} 

function loadData(page_Name='search.php',get1='g1=1',get2='g2=2',get3='g3=3'):void { 

    var randomParam:String = "?p=" + Math.floor(Math.random() * (10000000)); 
    var create_URL = (URL + page_Name + randomParam + '&'+ get1 + '&' + get2 + '&' + get3); 
    trace(create_URL); 

    _loader = new URLLoader(); 
    _request = new URLRequest(create_URL); 
    _request.method = URLRequestMethod.POST; 
    _loader.addEventListener(Event.COMPLETE, onLoadData); 
    _loader.addEventListener(IOErrorEvent.IO_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.NETWORK_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.VERIFY_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.DISK_ERROR, onDataFiledToLoad); 
    _loader.load(_request); 
} 

function onLoadData(e:Event) { 

    usr_name = e.target.data; 
} 
+0

このように動作しますが、読み込みと出力の間に遅延があるため、一度読み込まれるとUnknownが読み込まれますが、名前に変更されます。 –

+0

明らかに発生します。あなたはネットワークを介して要求しています。それは遅すぎる必要はありません。レスポンスが返されるまで、何も開始していないことを確認してください。 – loxxy

0

OK、あなたのコードでチラッと見から、あなたがAS3でのURLリクエストの「非同期」な性質を知らない明らかです。

_loader.load()を実行すると、Flashは実際には別のスレッドでこのパイプラインを開きます。これにより、URL要求のロード中にアプリケーションがフリーズしないようにします。

あなたがする必要があるのはとてもこのようなものです:

public function get_user_name(usr_id){ 
    loadData('search.php',"quest=name",'usr_id='+usr_id); 
} 

private function loadData(page_Name='search.php',get1='g1=1',get2='g2=2',get3='g3=3'):void { 
    var randomParam:String = "?p=" + Math.floor(Math.random() * (10000000)); 
    var create_URL = (URL + page_Name + randomParam + '&'+ get1 + '&' + get2 + '&' + get3) ; 
    trace(create_URL); 

    _loader = new URLLoader(); 
    _request = new URLRequest(create_URL);   
    _request.method = URLRequestMethod.POST; 
    _loader.addEventListener(Event.COMPLETE, onLoadData); 
    _loader.addEventListener(IOErrorEvent.IO_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.NETWORK_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.VERIFY_ERROR, onDataFiledToLoad); 
    _loader.addEventListener(IOErrorEvent.DISK_ERROR, onDataFiledToLoad); 
    _loader.load(_request); 
} 

public function onLoadData(e:Event):String { 
    usr_name = e.target.data || 'Unknown'; 
} 

そして、あなたは私はあなたのコードを強く型付けされていない気づいた

var usr_name = ""; 
get_user_name(); 

のようにそれを呼び出します。つまり、変数にデータ型を割り当てることはできません。これにより問題が発生し、可読性も低下します。

また、ローダーがガベージコレクションされるように、追加したすべてのイベントリスナーを削除することをお勧めします(removeEventListener)。

+0

答えを複製することは、私たちが従わなければならないことではなく、ちょうど私の考えです。 – loxxy

+0

ああ、私はあなたの答えを複製していません。コードは__OBVIOUSLY__は同じですが、あなたはOPをスプーンフェイズしただけで、なぜそれが動作するのか説明しました。結局のところ、それは重複と呼ばれていないので、あなたの議論は無効です....ちょうど私の考え。 –

関連する問題