0

私は次の機能を持っています:

function anfahrtskosten()
{
    var xmlhttp;
    var entfernung=0;
    var anfahrtskostenergebnis=0;
    var anfahrtskostenergebnis1=0;
    var plz=document.modhochzeitskalk.plz.value;
    //aus den Parametern
    var anfahrtskosten=1;

    if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
    else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
    xmlhttp.onreadystatechange=function()
          {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
                entfernung = xmlhttp.responseText;
                if (entfernung > 100 && entfernung < 2000) {
                    anfahrtskostenergebnis1 = anfahrtskosten * entfernung;
                } else {
                    anfahrtskostenergebnis1 = 0;
                }
                    anfahrtskostenergebnis = Math.round(anfahrtskostenergebnis1);
                    document.getElementById("anfahrtskostenergebnis").innerHTML=anfahrtskostenergebnis+",00 &euro;";
          }
    xmlhttp.open("GET","/modules/mod_hochzeitskalk/ogdb_remote.php?plzstart=10245&plzend="+plz,true);
    xmlhttp.send();
    return anfahrtskostenergebnis;
}

var anfahrtskostenergebnisに格納されている数値を別の関数で使用したいので、次のように試しました。

var gesamtkosten = anfahrtskosten() + videokosten() + filmkosten() + fotokosten() + extrakosten();

しかし、それは機能しません、私は何を間違っているのですか?

4

3 に答える 3

1

if(xmlhttp.readyState == 4 ...(つまり、ifが最初のステートメントのみを実行している)の後に開始中括弧'{'がありません

于 2013-02-27T14:20:58.033 に答える
1

AJAXを使用しているため、AJAX呼び出しが戻るまで処理を続行できません。呼び出しは非同期です。つまり、プログラムフローは続行され、AJAX呼び出しは並列スレッドで実行されます。

代わりに、遅いネットワークトラフィックが結果を提供するのを待つ間、すべてのスクリプトアクティビティを停止することであるため、この方法でそれを行うことは非常に理にかなっています。

値がAJAXを介して返された後に呼び出されるコールバック関数を使用するように、プログラムを再構築する必要があります。

これで開始できますが、追加する他の関数についても同様のことを行い、すでに収集されている値を追跡し、すべてが取得されたら最終的なコールバックを実行する必要があると思います。

function anfahrtskosten(){
    var xmlhttp;

    ... your original code here...

                    anfahrtskostenergebnis = Math.round(anfahrtskostenergebnis1);

                    // call the callback here, with the value you retrieved
                    callback(anfahrtskostenergebnis); // <~~~~
                    document.getElementById("anfahrtskostenergebnis").innerHTML=anfahrtskostenergebnis+",00 &euro;";
          }
    xmlhttp.open("GET","/modules/mod_hochzeitskalk/ogdb_remote.php?plzstart=10245&plzend="+plz,true);
    xmlhttp.send();
}

var callback = function(anfahrtskosten){
  var gesamtkosten = anfahrtskosten + videokosten() + filmkosten() + fotokosten() + extrakosten();
  // do something with cost...
}
于 2013-02-27T14:21:54.243 に答える
0

本当に簡単な解決策または回避策は、ドキュメントのどこかにvaribaleをinnerhtmlに格納することです。これは、私の例ですでに行ったことです。

document.getElementById( "anfahrtskostenergebnis")。innerHTML = anfahrtskostenergebnis + "、00€";

したがって、2番目の関数はinnerHTMLからこの値を読み取ることにより、この値を再利用できます。私の場合、2番目の関数を実行する前に、小さなタイムアウトを設定する必要もありました。

于 2013-02-28T13:56:16.160 に答える