0

オブジェクトに余分な文字が含まれているようです。私は Actionscript を初めて使用するので、それらがそこに属しているかどうかはわかりません。また、目的のパラメーターを抽出できないようです。コード セグメントは次のとおりです。

_root.buttonBkg.onPress = function() {
   var wikiload1:LoadVars = new LoadVars();
   var wikiload2:LoadVars = new LoadVars();
   wikiload1.wikiname = wikiterm;
   wikiload2.onLoad = function(success:Boolean) {
    trace("entered wikiload1.onLoad function")
    if (success) {
     _root.createTextField("wikidisplay", _root.getNextHighestDepth(), 0, 150, 550, 380);
     _root.wikidisplay.html = true;
     _root.wikidisplay.htmlText = wikiload2.displayhtml;
     trace("wikiload2.displayhtml is" + wikiload2.displayhtml);
     trace(wikiload2.toString());
     trace("success route");
    } 
    else {
     _root.createTextField("wikidisplay", _root.getNextHighestDepth(), 0, 150, 550, 380);
     _root.wikidisplay.text = "Error connecting to server.";
     trace("error route");
    }
   };
   wikiload1.sendAndLoad("http://myURL.script.py", wikiload2, "POST");
   trace("?wikiname=" + wikiload1.wikiname);
   trace("did the sendAndLoad")
  }

トレース結果は次のとおりです。

~/src/Main.as:70:?wikiname=コーヒー

~/src/Main.as:71:sendAndLoad を実行しました

~/src/Main.as:53: wikiload1.onLoad 関数を入力

~/src/Main.as:58:wikiload2.displayhtml isundefined

~/src/Main.as:59:%0Adisplayhtml=%3Cp%3E%3Cb%3ECoffee%3C%2Fb%3E%3C%2Fp%3E%3Cp%3E%3Cbr%2F%3E%3Cbr%2F%3ECoffee% 20is%20a%20brewed%20drink%20prepared%20[多くの戻り値が削除され、長い]div%3E%0A&onLoad=%5Btype%20Function%5D

~/src/Main.as:60:成功ルート

wikiload2.displayhtml が定義されていないのはなぜですか? これは Actionscript エラーですか、それとも、呼び出しているスクリプト (Web サーバー上の Python スクリプト) に問題があります。

4

1 に答える 1

1

Python サーバーに問題があるかどうかに関係なく、CharlesFiddler、さらにはFireBugなどのプロキシ スニファーで確認する必要があります。結果は正常に見えますが、トレース (wikiload2.toString) に表示される改行文字 %0A が loadVars の解析で問題を引き起こしているかどうかはわかりません。最初にそれを削除してみてください。

これが修正であるかどうかはわかりませんが、AS2 を初めて使用するということでしたので、今後の参考のためにコードをもう少し詳しく説明させてください。AS2にいる必要があり、AS3で作業できない理由があると思います。ただし、AS2 を使用する場合でも、オブジェクト指向プログラミングを検討することをお勧めします。そうすれば、コードの構造化、サードパーティのフレームワークとの連携、およびプロジェクトの保守性レベルの維持がはるかに簡単になります。

たとえば、フレームワークにはASAPFrameworkというものがあります。LoadVarsXML という非常に簡単なオブジェクトがあり、ロードの結果を XML オブジェクトとしてロードできます。Python とフラッシュの両方で、loadVars 構造よりもデバッグする方が適切です。

別のアドバイス; AS2 では、メソッド呼び出しのスコープは、メソッド宣言のスコープとは別のものにすることができます。つまり、メソッドと同じオブジェクトで定義されている変数は、そのメソッドを onLoad などのイベント コールバックで実行するために渡すと、アクセスできなくなる可能性があります。これを回避する 1 つの方法は、すべての値をグローバルに格納することです。これは、_root をプレフィックスとして使用する場合と同様です。ただし、これにより、コードが読みにくく、理解しにくくなり、お気づきのように、デバッグが難しくなります。* _root の使用は、一般的に大きな禁止事項です*。上記のサンプル スクリプトを拡張し続けると、最終的には、助けを求めても誰も理解できないコード スパゲッティに陥ることになります。

これを回避する方法は、フレーム スクリプトの代わりにクラスを使用することですが、それらに固執したい場合でも、コールバック メソッドを Delegate.create(scope, method) でラップすることで、すでに少しクリーンアップできます。

Delegate.create メソッドを使用したコードは次のようになります。また、wikiLoad1 と 2 の変数を自由に wikiLoader と wikiResults に書き換えました。これにより、彼らのタスクが少し明確になります。

_root.buttonBkg.onPress = Delegate.create(this, handleButtonPress);

function handleButtonPress():Void {
    var wikiResult:LoadVars = new LoadVars();
    wikiResult.onLoad = Delegate.create(this, handleWikiLoad);

    var wikiLoader:LoadVars = new LoadVars();
    wikiLoader.wikiname = wikiterm;
    wikiLoader.sendAndLoad("http://myURL.script.py",wikiResult,"POST");
    trace("?wikiname=" + wikiLoader.wikiname);
    trace("did the sendAndLoad");
}

function handleWikiLoad(success:Boolean):Void {
    trace("entered wikiLoader.onLoad function");
    if (success) {
        _root.createTextField("wikidisplay",_root.getNextHighestDepth(),0,150,550,380);
        _root.wikidisplay.html = true;
        _root.wikidisplay.htmlText = wikiResult.displayhtml;
        trace("wikiResult.displayhtml is" + wikiResult.displayhtml);
        trace(wikiResult.toString());
        trace("success route");
    } else {
        _root.createTextField("wikidisplay",_root.getNextHighestDepth(),0,150,550,380);
        _root.wikidisplay.text = "Error connecting to server.";
        trace("error route");
    }
}

これは見た目がすっきりしていて、理解しやすいと思います。前述のように、Python で改行文字を削除してみてください。可能であれば、できるだけ早く LoadVarsXML を確認してください。これにより、AS2 での生活が大幅に簡素化されます。

于 2011-01-23T12:29:51.193 に答える