0

実行するmysqlトランザクションを持つphpページを呼び出すだけのajax関数があります。mysql ログをチェックすると、トランザクションが正常に実行されることを確認しましたが、xmlhttp オブジェクトは else ステートメントの readyState とステータスにジャンプします。

私のjsコード:

function promoteOptionsAllot(stid,cid,nsid,elid,flag){
anchor = document.getElementById('promoteAnchor'+elid);
imgContainer = document.getElementById('promoteStatus'+elid);
if(flag == 1){
opt1 = encodeURIComponent(document.getElementById('promote_option1').value);
opt2 = encodeURIComponent(document.getElementById('promote_option2').value);
opt3 = encodeURIComponent(document.getElementById('promote_option3').value);
opt4 = encodeURIComponent(document.getElementById('promote_option4').value);
params =   "stid="+encodeURIComponent(stid)+"&course="+encodeURIComponent(cid)+"&sem="+encodeURIComponent(nsid)+"&element="+encodeURIComponent(elid)+"&popt1="+opt1+"&popt2="+opt2+"&popt3="+opt3+" &popt4="+opt4+"&flag="+encodeURIComponent(flag);
 }
else if(flag == 2){
params =   "stid="+encodeURIComponent(stid)+"&course="+encodeURIComponent(cid)+"&sem="+encodeURIComponent(nsid)+"&element="+encodeURIComponent(elid)+"&flag="+encodeURIComponent(flag);
}


if (window.XMLHttpRequest)
 { 
 xmlhttp=new XMLHttpRequest();
 }
else
 {
 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  { 
 if (xmlhttp.readyState==4 && xmlhttp.status==200)
  {
document.body.removeChild(document.getElementById('prBox'));
document.body.removeChild(document.getElementById('prBackground'));
result = xmlhttp.responseText;  
if(result == "done"){
anchor.innerHTML = "<span style='color:#198D19;'><b>Promoted</b></span>";
imgContainer.src = "tick.png";
}else {
alert("There was a problem serving the request. Please try again.");
imgContainer.src = "cross.jpg";
}
 }
else{
imgContainer.src = "alert.gif";
}
 }
xmlhttp.open("POST","promoptallot.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(params);
}

リンクの onclick イベントであり、トランザクションは成功しますが、リンクをクリックすると、何らかの方法で imagecontainer に alert.gif が表示されます。これは、readystate == 4 および status == 200 ステートメント内でコードを実行しないことを意味します。

jquery の使用を提案しないでください。安定したフレームワークなどは知っていますが、これだけを使って答えが必要です。

4

1 に答える 1

0

コンソールをチェックして、私はラインで問題を見つけましたdocument.body.removeChild(document.getElementById('prBox')); document.body.removeChild(document.getElementById('prBackground'));

これらの行はケースベースで実行する必要があり、ifステートメント内に配置しませんでした。

if (flag ==1){ document.body.removeChild(document.getElementById('prBox')); document.body.removeChild(document.getElementById('prBackground')); }今それが意図したように動作するようにそれを置いた後。

ありがとう。

于 2013-01-11T15:17:34.213 に答える