我有以下功能:
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 €";
}
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();
但它不起作用,我做错了什么?
答案 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 €";
}
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中读取它来重用这个值。 在我的情况下,我还需要在执行第二个函数之前设置一个小超时,以确保