【问题标题】:AJAX variable passes through to SQL but not PHPAJAX 变量传递给 SQL 但不传递给 PHP
【发布时间】:2020-03-22 08:24:43
【问题描述】:

我是 AJAX 的新手,如果有任何建议,我将不胜感激。

在一个文件中,我有以下 AJAX 代码:

        <meta charset="UTF-8">
      <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
      <script>


      var dyna = <?php echo $user_dyna; ?>;
      var limit = <?php echo $limit; ?>

      $(function() {

      $(".numbers-row").append('<div class="inc button" display:inline-block>+</div><div class="dec button">-</div>');

      $(".button").on("click", function() {

        var $button = $(this);
        var oldValue = $button.parent().find("input").val();

        if ($button.text() == "+") {
        if (dyna > 0) {
          var newVal = parseFloat(oldValue) + 5;
          dyna -= 5;
        }
        else {
            newVal = oldValue;
        }
        } else {
           // Don't allow decrementing below zero
          if (oldValue > 0) {
            var newVal = parseFloat(oldValue) - 5;
            dyna += 5;
            } else {
            newVal = 0;
          }
          }

        if (dyna >= 0) {var dynatxt = dyna;}
        else {var dynatxt = 'Insufficient';}

        $button.parent().find("input").val(newVal);

        var InstAtk = parseFloat(document.getElementById('atk').value);
        var InstDef = parseFloat(document.getElementById('def').value);
        var InstHP = parseFloat(document.getElementById('hp').value);
        var sum = InstAtk + InstDef + InstHP

        document.getElementById('dynacandy').innerHTML = '<b>Dyna Candies Remaining: ' + dynatxt + '</b>';

        if (sum > limit) {
        document.getElementById('limit').innerHTML = '<br><font color = "yellow">Stat total (' + sum + ') exceeds your limit of ' + limit + '</font><br>';
        }
        else {
        document.getElementById('limit').innerHTML = '';
        }
      });


        $(document).ready(function() {  
            $("form").submit(function(event) {

            var Atk = document.getElementById('atk').value;
            var Def = document.getElementById('def').value;
            var HP = document.getElementById('hp').value;
            console.log(dyna);
            $.ajax({
            url: 'titan_ajax.php',
            type: 'POST',
            data: {dyna: dyna, Atk: Atk, Def: Def, HP: HP},
            success: function(res){
                        console.log(res);
                        //alert('The server returned ' + res);
                    }

            });
            });
        });

    });
      </script>

</head>

<body>
    <center>
    <div class="titan">
    <form method="post" action="titan_ajax.php">
     <div class="numbers-row">
         &nbsp;&nbsp;&nbsp;<label for="name">Dyna HP</label>
        <input type='number' name="hp" id="hp" value="<?=$titan['titan_hp']?>">
      </div>
     <div class="numbers-row">
        &nbsp;&nbsp;&nbsp; <label for="name">Dyna Attack</label>
        <input type="number" name="atk" id="atk" value="<?=$titan['titan_atk']?>">
      </div>
   <div class="numbers-row">
           &nbsp;&nbsp;&nbsp;&nbsp<label for="name">Dyna Defense</label>
        <input type="number" name="def" id="def" value="<?=$titan['titan_def']?>">
      </div>
      <br>
    <input type = "submit" button class = "global-btn" value="Submit">
    <br/>
    <br/>
    <span id="dynacandy"></span>
    <span id="limit"></span>
    <br>
    </form>
    </div>
    </center>
</body>

</html>

在我的 ajax 文件中,我有:

if (isset($_POST['dyna'])) {
    $newdyna = $_POST['dyna'];
    $newAtk = $_POST['Atk'];
    $newDef = $_POST['Def'];
    $newHP = $_POST['HP'];

    if ($newdyna < 0) {
        echo $newdyna;
        echo 'error';
    }
    else {
        $mysqli->query("UPDATE user_items SET dyna_candy = {$newdyna} WHERE uid = {$uid}");
    }
}

我得到的奇怪错误是 - SQL 工作得很好 - 我已经测试了十几次。但是,我永远无法回显 PHP 变量 $newdyna,也不会在 $newdyna 低于零时显示文本“错误”。每当 $newdyna

我在这里做错了什么?

【问题讨论】:

  • dyna_candy 是什么数据类型?
  • 它是一个整数。
  • 变量dyna 中保存的是什么值?在 JS 中尝试 console.log-ing 它,并在 PHP 端使用 var_dump(不是 echo)。我怀疑它是 PHP 中的null
  • $newdyna = $_POST['dyna']; $newAtk = $_POST['Atk']; $newDef = $_POST['Def']; $newHP = $_POST['HP']; print_r 所有这些变量并查看输出
  • console.log dyna 在 ajax 中传递之前

标签: javascript php sql ajax


【解决方案1】:

您的 ajax 无法正常工作我将您的代码移至新函数 sendToServer 尝试下面的 HTML 代码...

<html>
<meta charset="UTF-8">
      <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
      <script>


      var dyna = <?php $user_dyna=1; echo $user_dyna; ?>;
      var limit = <?php $limit=1; echo $limit; ?>;  

      $(function() {

          $(".numbers-row").append('<div class="inc button" display:inline-block>+</div><div class="dec button">-</div>');

          $(".button").on("click", function() {

            var $button = $(this);
            var oldValue = $button.parent().find("input").val();

            if ($button.text() == "+") {
            if (dyna > 0) {
              var newVal = parseFloat(oldValue) + 5;
              dyna -= 5;
            }
            else {
                newVal = oldValue;
            }
            } else {
               // Don't allow decrementing below zero
              if (oldValue > 0) {
                var newVal = parseFloat(oldValue) - 5;
                dyna += 5;
                } else {
                newVal = 0;
              }
              }

            if (dyna >= 0) {var dynatxt = dyna;}
            else {var dynatxt = 'Insufficient';}

            $button.parent().find("input").val(newVal);

            var InstAtk = parseFloat(document.getElementById('atk').value);
            var InstDef = parseFloat(document.getElementById('def').value);
            var InstHP = parseFloat(document.getElementById('hp').value);
            var sum = InstAtk + InstDef + InstHP

            document.getElementById('dynacandy').innerHTML = '<b>Dyna Candies Remaining: ' + dynatxt + '</b>';

            if (sum > limit) {
                document.getElementById('limit').innerHTML = '<br><font color = "yellow">Stat total (' + sum + ') exceeds your limit of ' + limit + '</font><br>';
            }
            else {
                document.getElementById('limit').innerHTML = '';
            }
      });

    });



    function sendToServer() {
        var Atk = document.getElementById('atk').value;
        var Def = document.getElementById('def').value;
        var HP = document.getElementById('hp').value;
        console.log(dyna);
        $.ajax({
            url: 'titan_ajax.php',
            type: 'POST',
            data: {dyna: dyna, Atk: Atk, Def: Def, HP: HP},
            success: function(res){
                alert('success');
                console.log(res);
            },   
             error: function (jqXHR, exception) {
                var msg = '';
                if (jqXHR.status === 0) {
                    msg = 'Not connect.\n Verify Network.';
                } else if (jqXHR.status == 404) {
                    msg = 'Requested page not found. [404]';
                } else if (jqXHR.status == 500) {
                    msg = 'Internal Server Error [500].';
                } else if (exception === 'parsererror') {
                    msg = 'Requested JSON parse failed.';
                } else if (exception === 'timeout') {
                    msg = 'Time out error.';
                } else if (exception === 'abort') {
                    msg = 'Ajax request aborted.';
                } else {
                    msg = 'Uncaught Error.\n' + jqXHR.responseText;
                }
                alert(msg);
            }

        });
        return false;
    }
</script>

</head>

<body>
    <center>
    <div class="titan">
    <form method="post" onsubmit="sendToServer();">
         <div class="numbers-row">
             &nbsp;&nbsp;&nbsp;<label for="name">Dyna HP</label>
            <input type='number' name="hp" id="hp" value="<?=$titan['titan_hp']?>">
          </div>
         <div class="numbers-row">
            &nbsp;&nbsp;&nbsp; <label for="name">Dyna Attack</label>
            <input type="number" name="atk" id="atk" value="<?=$titan['titan_atk']?>">
          </div>
       <div class="numbers-row">
               &nbsp;&nbsp;&nbsp;&nbsp<label for="name">Dyna Defense</label>
            <input type="number" name="def" id="def" value="<?=$titan['titan_def']?>">
          </div>
          <br>
        <input type = "submit" button class = "global-btn" value="Submit">
        <br/>
        <br/>
        <span id="dynacandy"></span>
        <span id="limit"></span>
        <br>
    </form>
    </div>
    </center>
</body>

</html>

【讨论】:

  • 您好 Ronak,感谢您提出的解决方案!然而,我正在寻找的是一个页面,它会在点击提交按钮后通过表单操作将用户重定向。
  • 我试图根据我的 titan_ajax.php 文件中的条件向用户显示“成功”或“失败”消息。例如,如果 $newdyna
  • 是的,上面的代码不会重定向,只用ajax做事
  • 是的,您的代码在 ajax 中工作。但我想知道如何显示如上所述的“成功”或“失败”消息。
【解决方案2】:

通过添加到 Ronak 的原始 sendtoServer() 函数,我设法找到了解决我的问题的方法。此方法不涉及页面重定向,但仍显示在我的 titan_ajax.php 中回显的成功/错误消息。

function sendToServer() {
    event.preventDefault();

    console.log(change);
    console.log(dyna);

    $.ajax({
        url: 'titan_ajax.php',
        type: 'POST',
         data: {dyna: dyna, Atk: Atk, Def: Def, HP: HP},
        success: function(res){
            console.log(res);
        }   

    });

        $(".form-message").load("titan_ajax.php", {
        dyna: dyna,
        Atk: Atk,
        Def: Def,
        HP: HP,
        });
        return false;
    }

在我的 html 中,我添加了以下标签来显示来自 'titan_ajax.php' 的回声:

<p class="form-message"></p>

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2012-04-21
    • 2011-09-02
    • 2013-03-05
    相关资源
    最近更新 更多