2011-07-24 1 views
0

私はJavascript/ajax/phpを使ってフォームを記入しようとしていますが、問題は私の関数が必要なフォームの1つを満たし、サーバーからの2番目の応答を得たとしても停止してしまうことです。PHP Javascript AJAXは複数の入力フィールドを塗りつぶして計算します。

コード:

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 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を充填開始

機能210

validateSumma(単にいくつかの数学):ここでの問題のコードはgetKassasumma(スンマ)

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

です。およびDevideIntoCells();私はそれらのうちの1つを無効にし、もう1つは機能しますが、私は両方を有効にします。Dev.IntoCellsはdocument.getElementById( "spinwheel3")の前のどこかで停止します。style.visibility = "hidden";おそらくgetvalue(response)アヤックスの要求を終えてこれを殺した。他の方法と同じです。

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です。

答えて

0

あなたはリスナーが呼び出されるときに、それらの両方が同じ応答を参照してください、あなたはイベントリスナーに参照xmlhttpあなたを上書きしているので、すなわち

var xmlhttp; 

xmlhttpをローカルにするために試してみてください。

すべての機能の冒頭にあります。互換性を保つためにsend()の代わりにsend(null)を使用してください。

+0

答えをありがとう!しかし、私はFireBugを通して応答をチェックすることができ、私はいつも望みのものを手に入れることができます。 –

+0

@Akke:もちろん、2つの応答が得られますが、両方の関数 'xmlhttp.responeText'は同じテキストを参照し、' eval'ed doubleを取得します。したがって、実行は停止しません。両方とも開始されますが、同じテキストが使用されます。 – marc

+0

は意味があります、私はあなたの修正を今実装します^^ –

1

私はあなたが「泳いでいる」と思います。 AJAXで始める場合は、jQueryのようなフレームワークを使用することをお勧めします。これは$.get()または$.post()の関数です。それはあなたのために必要なすべてのAJAXロジックを達成します。

+1

はいjqueryは行く方法です。http://api.jquery.com/jQuery.ajax/ – marko

+0

問題はAJAXではありませんが、私の理解には私が希望する形式で回答を得ています。時間。 –

+0

チップのおかげで、tho。それを試してみる。 –

関連する問題