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

因为您使用的是 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 回答
1

您在 if (xmlhttp.readyState==4 ... 之后缺少一个开始大括号 '{' ... (即,您的 if 仅执行第一条语句)

于 2013-02-27T14:20:58.033 回答
0

一个非常简单的解决方案或解决方法是将变量存储在文档中的某个地方的 innerhtml 中,我在示例中已经做了

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

所以第二个函数可以通过从 innerHTML 读取它来重用这个值。在我的情况下,我还需要在执行第二个函数之前设置一个小的超时,以确保

于 2013-02-28T13:56:16.160 回答