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

标签 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)条件为 true 那么它不会返回 <div class='message-error'>并且加载图像继续移动(就像在等待响应一样),但没有收到任何响应作为返回。我被困了几天,但无法找到任何解决方案。请帮忙。

最佳答案

我不确定,但我认为在你的 php 脚本中 $deduct 已在 else block 内声明。

因此,当脚本执行并且 if ($wallet < $amount) 条件计算为 true 时,则跳过 else 部分,直接返回:-

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

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

关于javascript - PHP AJAX 脚本无法在所有条件下正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43165200/

相关文章:

javascript - 如何监听由网络摄像头错误 : NotAllowedError 触发的全局事件

Javascript - 创建一个增量为 30 步的 for 循环

javascript - 让 Chartjs 显示数据标签的键而不是值

javascript - 如何防止 angularJS 路由?

javascript - 获取所选项目的类属性

jquery - 如何从 ashx 文件读取 JSON 数据

javascript - 在 React 中动态设置文本区域的 PlaceHolder 颜色

php - 如何在 PHP 中查找对象 ID?

java - 解析 cv 文件

php - 从 2 个带条件的表进行 SQL 查询