0

onComplete関数でdata_file値にアクセスしようとしていますが、正直に言って、正しく呼び出しているかどうかさえわかりません。

public function version():String{
    var string_val = "";
    var data_file = "";

    //var request:URLRequest = new URLRequest("indexdynamic.php");
    var request:URLRequest = new URLRequest("http://localhost/indexdynamic.php");
        request.method = URLRequestMethod.POST;

    var verVars:URLVariables = new URLVariables();

    request.data = verVars

    var loader:URLLoader = new URLLoader(request);
    loader.addEventListener(Event.COMPLETE, onComplete);
    loader.dataFormat = URLLoaderDataFormat.VARIABLES;
    loader.load(request);

    function onComplete(event:Event):String{
        string_val = event.target.data.Var.toString();

        if (string_val ==  "First Selection") {
            data_file = "fill_in_blanks_doi.xml";
        }else {
            data_file = "fill_in_blanks_2_doi.xml";
        }
        return data_file;
    }
    var data_file = onComplete(loader.COMPLETE);
    return data_file;
}
4

3 に答える 3

1

通常、イベントリスナー関数はvoidを返します。したがって、戻り値を介してイベントリスナーから値を取得することはありません。

したがって、ステップ1:

削除:var data_file = onComplete(loader.COMPLETE); 削除:return data_file;//両方の行を削除します。値を返します。voidを返すように関数ヘッダーを変更します。

function onComplete(event:Event):void{

これで、「data_file」変数が保存され、誤って上書きされることはありません。ただし、これは非同期操作であるため、変数が設定されたため、コードの一部が呼び出されるのを待っています。アプリでコードの実行を続行するには、onComplete()内にもう1行追加する必要があります。それは次のようなものかもしれません:

processXML(data_file);

また

trace("Data File:", data_file);

それがあなたのためにそれをクリアすることを願っています。

===編集===

私は戻ってあなたのコードをもう一度読みました、そして私は何か他のものに気づきました。関数内で関数を宣言しています。それは通常、それほど素晴らしいアイデアではありません。onComplete()関数をgetVersion()関数の外に移動することをお勧めします。

2番目-getVersion()関数は文字列を返します。これは同期関数であることを意味します-呼び出し元のコードは即座に応答を期待します。これは機能しません。URLLoaderは非同期です-あなたはそれを呼び出します、そして将来のある不確定な時点でそれは応答します。したがって、コードは、サーバーからの応答を取得してデータが転送されている間、ローダーバーの表示などの他のことを自由に行うことができます。それが完了すると、laoderはリスナーを呼び出します。この時点でのみ、バージョンを説明するという当初の目標が可能になります。

つまり、コードを変更して、ロードが完了するまで実行を一時停止し、情報がロードされて使用できるようになったら、onCompleteリスナーにボールのローリングを再開させる必要があります。

于 2012-08-03T16:53:00.813 に答える
0

メソッドの外部で宣言された変数にデータを書き込むことにより、データへのアクセスを提供する必要があります。

于 2012-08-02T15:05:44.163 に答える
0

出力はいつでもグローバル配列に保存でき、アプリのどこからでもアクセスできます。

var myArray:Array = new Array();

function onComplete(e:Event):void {
   myArray.push(e.target.data);
}
于 2014-09-24T16:24:24.943 に答える