PHP Javascript AJAX填充和计算几个输入字段-只有一个函数填充

PHP Javascript AJAX fill and calculate several input fields - only one function fills?

本文关键字:填充 输入 几个 字段 -只 有一个 函数 AJAX Javascript 计算 PHP      更新时间:2023-09-26

我试图使用Javascript/ajax/php填写表单,但问题是,我的函数只填写一个所需的表单和停止,即使我已经从服务器得到了第二个响应。

代码:

开始填充的函数

function luePankkiviivakoodi(str) {
if (str==null) { //are we NOT injecting variables directly into the code, if not - Prompt for the barcode, and set the variable
    var str = prompt("Valmis vastaanottamaan", "");
}
if (str==null) { //someone pressed abort on the prompt, we return
    return;
}
newstr = str.split(' ').join(''); // remove spaces
if (str=="") { //is the string empty? -> return
    return;
}
if (window.XMLHttpRequest) { //AJAX code
    xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        eval(xmlhttp.responseText);
        //we set some fields, no problem
        document.getElementById('P_VII').value = viite;
        document.getElementById('IBAN').value = saajatili;
        document.getElementById('laskun_summa').value = summa;
        document.getElementById('eräpäivä').value = eräpäivä;
        //trigger other functions
        getKassasumma(summa); //AJAX for accesing the database and calculating the sale price
        DevideIntoCells(); //AJAX for accessing the database and dividing a sum into different cells
        validateSumma(); //Validates the sum, and tells the user if it's OK
    }
}
xmlhttp.open("GET","dataminer.php?question=pankkiviivakoodi&q="+newstr,true);//open AJAX connecttion
xmlhttp.send();//send stuff by AJAX

}

getKassasumma:

function getKassasumma(str) {
if (str=="") {
    return;
}
 if (window.XMLHttpRequest) {
    xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        eval(xmlhttp.responseText);
    }
}
kale = document.getElementById("TOS_K_ale").value;
xmlhttp.open("GET","dataminer.php?question=kassasumma&q="+str+"&kale="+kale.replace("%", "p")+"&nro="+document.getElementById("S_NRO").value,true);
xmlhttp.send();
}

DevideIntoCells:

function DevideIntoCells() {
    str = document.getElementById('tiliöintitapa').value;
    if (str==null) {
            return;
    }
    if (window.XMLHttpRequest) {
        xmlhttp=new XMLHttpRequest();
        document.getElementById("spinwheel3").style.visibility = "visible";
    }
    xmlhttp.onreadystatechange=function() {
        //alert('OK! val= '+xmlhttp.readyState);
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            //alert('OK!');
            eval(xmlhttp.responseText);
            //alert('OK2!');
            document.getElementById("spinwheel3").style.visibility = "hidden";
            //alert('OK3!');
            calculateSumma();
        }
    }
    xmlhttp.open("GET","dataminer.php?question=percentages&q="+str+"&nro="+document.getElementById('S_NRO').value,true);
    xmlhttp.send();
}

validateSumma(只是一些数学):

function validateSumma() {
    float = document.getElementById('summabox').value;
    float = float.replace(",",".");
    summa = parseFloat(float);
    if (summa < 0) {
        summa = 0
    };
    kassasummaunp = document.getElementById('laskun_summa').value;
    kassasummafloat = kassasummaunp.replace(",",".");
    kassasumma = parseFloat(kassasummafloat);
    if (kassasumma < 0) {
        kassasumma = 0
    };
    if (kassasumma == 0 || summa == 0) {
        prosentti = "0%";
    }
    else {
        prosentti = summa / kassasumma * 100;
        prosentti = Math.round(prosentti*Math.pow(10,2))/Math.pow(10,2);
        prosentti = prosentti+"%";
    };
    if (prosentti == "100%") {
        is100 = 1;
    }else {
        is100 = 0;
    }
    document.getElementById('prosentti').innerHTML = prosentti;
    if (is100 == 1) {
        document.getElementById('prosentti').setAttribute("style", "color:green");
    } else {
        document.getElementById('prosentti').setAttribute("style", "color:red");
    }
    puuttuvaEuro();
}

这里的问题代码是getKassasumma(summa);和DevideIntoCells();。我禁用其中一个,另一个工作,我启用它们,DevideIntoCells停在document.getElementById("spinwheel3").style之前的某个地方。可见性= "hidden";,可能在eval(response)中,因为getKassasumma已经完成了ajax请求并杀死了这个请求。反过来也是一样。

AJAX答案:DevideIntoCells:

var KP_osuus = parseFloat('40');
laskunsumma = parseFloat(document.getElementById('laskun_summa').value);
onepercent = laskunsumma/100;
newvalue = onepercent*KP_osuus;
document.getElementById('box1.5').value = newvalue;
var KP_osuus = parseFloat('60');
laskunsumma = parseFloat(document.getElementById('laskun_summa').value);
onepercent = laskunsumma/100;
newvalue = onepercent*KP_osuus;
document.getElementById('box2.5').value = newvalue;

AJAX答案:getKassasumma

var kassasumma = '477.99€';
document.getElementById('kassasumma').value = kassasumma;

如果您需要澄清,请询问!

编辑:只是为了清楚,这不是AJAX的问题,而是javascript。

我认为你是"游泳",我们怎么说的。如果您从AJAX开始,我建议您使用像jQuery这样的框架,它的$.get()$.post()函数。它将为您完成所有需要的AJAX逻辑。

尝试使xmlhttp本地,即

var xmlhttp;

因为您覆盖了您在事件侦听器中引用的xmlhttp,所以当侦听器被调用时,它们都看到相同的响应。

在每个函数的开头。为了兼容,也使用send(null)代替send()