0

html、js、ajax、php を使用してブラックジャック ゲームを作成しています。Player が最初にゲームをロードすると、名前を尋ねるプロンプトがページに表示され、これが name.php に送られ、ユーザー名がデータベースにあるかどうかがチェックされます。そうでない場合は、追加します。いずれの場合も、プレーヤーの名前と銀行の合計が画面に表示されます。コードの次の部分を追加するまで、コードのこの部分は正常に機能していました。

ユーザーが「hit」ボタンをクリックすると、hit.php が呼び出されます。これは、今のところ、デッキ テーブルから 1 枚のカードを引き出し (後で完全に hit を実装します)、画面の「player」div 内に配置するだけです。 . ただし、2 つの ajax 呼び出しがあるため、プレーヤー名の元のプロンプトを含め、何も起こっていません。

2 番目の呼び出しが 1 番目の呼び出しに干渉していませんか?

ajax 呼び出しをどのように扱うべきかについての提案は大歓迎です。

var username;
var playerName = "";
var playerBank = 0;
var playerCard;
var playerHandValue = 0;
var dealerHandValue = 0;
var randomCardNumber;

function checkName() {
username = prompt("Welcome to Blackjack.\n Please enter your username");
if(document.getElementById('playerName').value == null) {
    ajaxName();
}   
click();
}

function printName() {
return playerName;
}

function printBank() {
return playerBank;
}
function ajaxName() {
var uName = username;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttpN=new XMLHttpRequest(); 
} 
else {// code for IE6, IE5 
    xmlhttpN=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttpN.onreadystatechange=function() { 
    if (xmlhttpN.readyState==4 && xmlhttpN.status==200) { 
        var elements = xmlhttpN.responseText.split("|");
        playerName = elements[0];

        playerBank = elements[1];
        document.getElementById('playerName').innerHTML = printName();
        alert(playerName);
        document.getElementById('playerBank').innerHTML = printBank();

    }
} 
xmlhttpN.open("POST","name.php",true); 
xmlhttpN.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xmlhttpN.send("player="+username);
}
function click() {
document.getElementById('hit').onclick = function(){ ajaxButton(this);};
document.getElementById('stand').onclick = function(){ ajaxButton(this);};
document.getElementById('raiseBet').onclick = function(){ ajaxButton(this);};
document.getElementById('newGame').onclick = function(){ ajaxButton(this);};
}
function ajaxButton(buttonClicked) {
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttpB=new XMLHttpRequest(); 
} 
else {// code for IE6, IE5 
    xmlhttpB=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() { 
    if (xmlhttpB.readyState==4 && xmlhttpB.status==200) { 
        var elements = xmlhttpB.responseText;
        if(buttonClicked.innerHTML == "HIT") {
            randomCardNumber = randNumber(1,52);
            playerCard = elements[0];
            document.getElementById('player').innerHTML = displayCard();
            xmlhttpB.open("POST","hit.php",true); 
            xmlhttpB.setRequestHeader('Content-type','application/x-www-form-urlencoded');
            xmlhttpB.send("card_id="+randomCardNumber);
        }
    }
if(buttonClicked.innerHTML == "STAND") {
    alert("stand");
}
if(buttonClicked.innerHTML == "RAISE BET") {
    alert("raise bet");
}
if(buttonClicked.innerHTML == "NEW GAME") {
    alert("new game");
}
}
4

1 に答える 1

1

お使いのブラウザーで JavaScript エラーが報告されておらず、プロンプトがまったく表示されず、ヒットをクリックしても何も起こりませんか? おそらく、checkName() または click() 関数をまったく呼び出していないように思えます。以前はそうではなかったのに、最近それらをメソッドにリファクタリングしましたか?

ページが読み込まれるとすぐに checkName が発生するように思われるので、まだ行われていない場合は、ページの下部にあるスクリプト ブロックに呼び出しを入れてみてください。

于 2012-12-05T05:22:40.067 に答える