PHP AJAX脚本在所有条件下都无法正常工作

时间:2017-04-02 06:15:17

标签: javascript php jquery html ajax

我有一个脚本,我想使用ajax处理表单数据。该脚本返回成功消息,但不返回错误消息。看看下面的脚本。

AJAX脚本

$(document).ready(function() {
    $("#submit").click(function() {
        var dataString = {
            flip: $("#flip").val(),
            amount: $("#amount").val()
        };
    $.ajax({
            type: "POST",
            dataType : "json",
            url: "flip-process.php",
            data: dataString,
            cache: true,
      beforeSend: function(){
                $("#submit").hide();
                $("#loading").show();
                $(".message").hide();
      },
            success: function(json){
                setTimeout(function(){
                    $(".message").html(json.status).fadeIn();
                    $('#mywallet').html('$' + json.deduct);
                    $("#submit").show();
                    $("#loading").hide();
                },3000);
            }
        });
        return false;
    });
});

PHP脚本

<?php
session_start();
include'config/db.php';
$msg = null;
$sessionid = (!empty($_SESSION['login']))?$_SESSION['login']:null;

$wp = $pdo->prepare("SELECT set_cointoss_wp, set_cointoss_prob FROM settings");
$wp-> execute();
$sp = $wp->fetch();
    $percent = $sp['set_cointoss_wp'];
    $probablity = $sp['set_cointoss_prob'];

$bal = $pdo->prepare("SELECT mb_acbal, mb_wallet FROM mem_balance WHERE mb_id = :mem");
$bal-> bindValue(':mem', $sessionid);
$bal-> execute();
$bf = $bal->fetch();
    $balance = $bf['mb_acbal'];
    $wallet = $bf['mb_wallet'];

$coin   = (!empty($_POST['flip']))?$_POST['flip']:null;
$amount = (!empty($_POST['amount']))?$_POST['amount']:null;

if($_POST){
        if($wallet < $amount){
            $msg = "<div class='message-error'>Sorry buddy! You have insufficient balance. Please <a href=''>recharge</a> your wallet.</div>";
        }else{
            $deduct = $wallet-$amount;
            $prob = rand(1, 10);

            //set new wallet balance after bet amount deduction
            $stmt = $pdo->prepare("UPDATE mem_balance SET mb_wallet = :bal WHERE mb_user = :user");
            $stmt-> bindValue(':bal', $deduct);
            $stmt-> bindValue(':user', $sessionid);
            $stmt-> execute();

        if($coin == ''){
          $msg = "<div class='message-error'>Sorry buddy! Fields cannot be left empty.</div>";
        }else{
          if($coin == "head"){
                    if($prob <= $probablity){
                        $result = 1;
                    }else{
                      $result = 2;
                    }
            if($result == 1){
              // win
                        $wa = $amount*$percent;
                        $win_amount = $wa/100;
                        $final_cash = $win_amount+$balance;

                        // update database with winning amount
                        $stmt = $pdo->prepare("UPDATE mem_balance SET mb_acbal = :bal WHERE mb_user = :user");
                        $stmt-> bindValue(':bal', $final_cash);
                        $stmt-> bindValue(':user', $sessionid);
                        $stmt-> execute();

              $msg = "<div class='message-success'>Congratulations buddy! You won... <strong>$".$win_amount."</strong> has been credited to your account.</div>";
            }else{
              // loose
              $msg = "<div class='message-error'>Sorry buddy! You lost... But do not loose hope. Try your luck again :)</div>";
            }
          }else{
                    if($prob <= $probablity){
                        $result = 2;
                    }else{
                      $result = 1;
                    }
            if($result == 1){
              // loose
              $msg = "<div class='message-error'>Sorry buddy! You lost... But do not loose hope. Try your luck again :)</div>";
            }else{
              // win
                        $wa = $amount*$percent;
                        $win_amount = $wa/100;
                        $final_cash = $win_amount+$balance;

                        // update database with winning amount
                        $stmt = $pdo->prepare("UPDATE mem_balance SET mb_acbal = :bal WHERE mb_user = :user");
                        $stmt-> bindValue(':bal', $final_cash);
                        $stmt-> bindValue(':user', $sessionid);
                        $stmt-> execute();

              $msg = "<div class='message-success'>Congratulations buddy! You won... <strong>$".$win_amount."</strong> has been credited to your account.</div>";
            }
          }
        }
        }
        echo json_encode(array('status' => $msg, 'deduct' => $deduct));
}
?>

在上面的脚本中,当if($wallet < $amount)条件为false并且执行else条件时,脚本正常工作并根据需要返回<div class='message-success'>。但是,如果if($wallet < $amount)条件为真,则其不返回<div class='message-error'>并且加载图像继续移动(就像等待响应一样),但不会收到任何响应。我在这几天就被困住了,但却无法找到任何相同的解决方案。请帮忙。

1 个答案:

答案 0 :(得分:1)

我不确定,但我认为在您的PHP脚本中 $ deduct 已在else块中声明。

所以当脚本执行时如果($ wallet&lt; $ amount)条件的计算结果为true,则跳过else部分并直接返回: -

return  echo json_encode(array(
        'status' => $msg,
        'deduct' => $deduct
    ));

所以可能会出现$ deduct无法识别的情况。尝试通过在if块之前声明 $ deduct 来执行。