JS函数没有返回return

时间:2013-02-27 14:10:50

标签: javascript

我有以下功能:

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();

但它不起作用,我做错了什么?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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...
}

答案 2 :(得分:0)

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

document.getElementById(“anfahrtskostenergebnis”)。innerHTML = anfahrtskostenergebnis +“,00€”;

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