【问题标题】:AJAX function is not getting the correct response from PHP?AJAX 函数没有得到 PHP 的正确响应?
【发布时间】:2017-10-27 15:40:38
【问题描述】:

我用 JQuery 和 PHP 编写了一个脚本, 从 PHP 成功返回后,AJAX 函数应该会捕获成功响应,但我没有得到。 下面是代码:

$.ajax({

                    url     :"script_admin-add-category.php",
                    method  :"POST",
                    data    :{lExpensesId:lcl_ExpensesId},

                    success:function(data){
                        //if(data=="ok"){
                            if(data=="YES"){
                                alert("EMAIL");
                            }else{
                                alert(data);
                            }
                        //}
                        //if(data=="ok"){
                            //alert("Expenses Id already exists!");
                        //}else{
                            //alert(data);
                        //}
                    }

        });

这里是php代码

//Check connection
    if(!$conn){
        die("Connection Failed: " .mysqli_connect_error());
    }else{
//echo "helloooo";
            if(isset($_POST["lExpensesId"])){
                $lExpensesId    = $_POST["lExpensesId"];
                    $Lquery = "SELECT ExpensesId FROM tblexpensestype WHERE ExpensesId = '$lExpensesId'";
                    if($query_result = mysqli_query($conn, $Lquery)){

                            if(mysqli_num_rows($query_result )){
                                echo 'YES';
                            }else{
                                //echo "Proceed";
                            }
                    }else{
                        echo "Not Okay";
                    }
            }else{

            }
    }       

我也可以在浏览器上看到回显值和警报值。但是如果条件不适用于成功功能???

【问题讨论】:

  • 您在网络控制台中得到什么响应代码?这应该始终是您调试 ajax 以验证请求是否发生以及它得到什么响应的第一站。
  • 我只得到“是”。实际上,它应该显示 YES 和 EMAIL
  • 我敢打赌这不仅仅是肯定的。
  • console.log( escape(data) )
  • Yaar,echo 会将值返回给 AJAX 吗?为什么不呢?

标签: javascript php jquery ajax


【解决方案1】:

通过在 PHP 中使用 exit() 语句解决了上述问题,因为我在我的值之后得到了五个 ↵↵↵↵↵,这意味着我有 5 行 html 而没有关闭?>。所以解决这个问题的最好方法是根据需要在 PHP 中使用 exit()

【讨论】:

    【解决方案2】:

    所有方法都是已知的,非常感谢您的帮助。我的问题是为什么我无法从 PHP 中获得适当的回报。以下是我的代码:

    var lcl_ExpensesId = $("#IExpensesId").val();
                //alert(lcl_ExpensesId);
            $.ajax({
    
                        url     :"script_admin-add-category.php",
                        method  :"POST",
                        data    :{lExpensesId:lcl_ExpensesId},
                        success:function(data){
                            if(data=="ok"){
                                alert("Inserted");
                            }else{
                                alert(data);
                            }
                        }
            });
    ob_start();
    

    /------------------读取账户下拉费用列表的功能 ------------------ -----/

    require_once 'db_config.php';
    $newlist    = fxn_CONFIGURATION();
    $HOST       = $newlist[0];
    $DBNAME     = $newlist[1];
    $UNAME      = $newlist[2];
    $PSWD       = $newlist[3];
    $conn   =   mysqli_connect($HOST, $UNAME, $PSWD, $DBNAME);
    
    
        //Check connection
        if(!$conn){
            die("Connection Failed: " .mysqli_connect_error());
        }else{
                if(isset($_POST["lExpensesId"])){
    
                    $lExpensesId    = $_POST["lExpensesId"];
    
                        $Lquery = "SELECT ExpensesId FROM tblexpensestype WHERE ExpensesId = '$lExpensesId'";
                        $query_result = mysqli_query($conn, $Lquery);
    
                                if(mysqli_num_rows($query_result) > 0){
                                    echo "ok";
                                }else{
                                    echo "Proceed";
                                }
    
                }
        }       
    mysqli_close($conn);
    
    
    ob_flush();
    

    因为,我在我的输入 keyup 方法之一中使用了这个 AJAX,所以无论我每次输入什么,它都会执行 PHP 脚本。我在数据库中有一个作为 FOOD 的项目。当我输入“F”时,我得到了继续,“O” - 继续,“O” - 继续,“D” - 好的...... 当我键入 D 时,我应该得到“插入”而不是 Ok.... 这是我的疑问,为什么我会得到这个????

    【讨论】:

    • @J Salaria 如果您使用单词进行搜索,那么您应该使用SQL LIKE OR WILDCARD QUERY 使用ExpensesId = '$lExpensesId' 不会给您正确的答案.. $Lquery = "SELECT ExpensesId FROM tblexpensestype WHERE ExpensesId LIKE '%$lExpensesId%'";
    • 我想知道你们无法理解这个问题。我正在发布一些内容,而你们一直在发布其他内容......非常感谢您告诉我有关通配符的信息。请看一下我发布的问题和所有帖子......
    • 在这里,我在 if(data=="ok") 的源断点中有一些新的东西,我可以看到数据的输出是“Proceed-----” - 表示输入键简单
    • 嗨,正如我得到的 ocal 返回值:未定义的响应:“Proceed ↵ ↵ ↵ ↵ ↵”这个:Object 而不是“Proceed”...任何人告诉我原因
    【解决方案3】:

    @J Salaria 我理解您的问题,您在使用 jquery AJAXPHP 代码时遇到问题,因为您没有得到想要的结果。通过 jquery ajax 发送数据有多种不同的方式,我将详细解释。

    $_POST["lExpensesId"] 你是从HTML <form> 获得这个ID 吗?因为在这里我将向你展示通过ajax 发送数据的3 种不同的实践方法..

    注意:您的代码容易受到 SQL 注入的影响。我还将向您展示克服的方法。如果您想了解有关 SQL 注入的更多信息,请单击此链接SQL INJECTION LINK

    HTML 格式代码:

    <form action="" id="send_lExpensesId_form" method="post">
        <input type="text" name="lExpensesId" id="lExpensesId" >
        <input type="submit" name="submit" >
    </form>
    

    发送数据的第一种方式是HTML &lt;FORM&gt;

     <script>
        $(document).ready(function(){
            $("#send_lExpensesId_form").submit(function(e){
                e.preventDefault();
    
                var form_serialize = $(this).serialize();
    
                $.ajax({
                    type:'POST',
                    url:'script_admin-add-category.php',
                    data:form_serialize,
                    success:function(data){
                        if(data == "YES"){
                            alert("EMAIL");
                        }else{
                            alert(data);
                        }
                    }
                });
            });
        });
    </script>
    

    发送数据的第二种方式是HTML &lt;FORM&gt;

        <script>
        $(document).ready(function(){
            $("#send_lExpensesId_form").submit(function(e){
                e.preventDefault();
    
                var form_serialize = new FormData($(this)[0]);
    
    
                $.ajax({
                    type:'POST',
                    url:'script_admin-add-category.php',
                    data:form_serialize,
                    contentType: false,
                    processData: false,
                    success:function(data){
                        if(data == "YES"){
                            alert("EMAIL");
                        }else{
                            alert(data);
                        }
                    }
                }); 
            });
        });
    </script>
    

    第三种发送数据的方法是WHEN A LINK CLICKED OR TO DELETED THROUGH ID OR CLASS

     <script>
        $(document).ready(function(){
            $("#send_lExpensesId_form").submit(function(e){
                e.preventDefault();
    
                var lcl_ExpensesId = $("#lExpensesId").val();
    
                $.ajax({
                    type:'POST',
                    url:'script_admin-add-category.php',
                    data:{lExpensesId:lcl_ExpensesId},
                    success:function(data){
                        if(data == "YES"){
                            alert("EMAIL");
                        }else{
                            alert(data);
                        }
                    }
                });
            });
        });
    </script>
    

    这里是带有mysqli_real_escape_string(); 反对 SQL 注入的 PHP 代码

        <?php
        $servername = "localhost";
        $username = "root";
        $password = "admin";
        $dbname = "demo";
    
        // Create connection
        $conn = mysqli_connect($servername, $username, $password, $dbname);
        // Check connection
        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }
    
        if(isset($_POST["lExpensesId"])){
            $lExpensesId = mysqli_real_escape_string($conn, $_POST["lExpensesId"]);
    
            $Lquery = "SELECT ExpensesId FROM tblexpensestype WHERE ExpensesId = '$lExpensesId'";
            if($query_result = mysqli_query($conn, $Lquery)){
    
                if(mysqli_num_rows($query_result )){
                    echo 'YES';
                }else{
                    echo "Proceed";
                }
            }else{
                echo "Error".mysqli_connect_error();
            }
        }
    ?>
    

    这里是带有MYSQLI-&gt;PREPARED 的其他 PHP 代码,它更好地防止 SQL 注入

    <?php
        // WITH MYSQLI PREPARED STATEMENT AGAINST SQL INJECTION
        $sql = $conn->stmt_init();
            $Lquery = "SELECT ExpensesId FROM tblexpensestype WHERE ExpensesId =?";
            if($sql->prepare($Lquery)){
                $sql->bind_param('i',$lExpensesId);
                $sql->execute();
                $sql->store_result();
    
                if($sql->num_rows > 0){
                    echo 'YES';
                }else{
                    echo "Proceed";
                }
            }
            else
            {
                echo "Error".mysqli_connect_error();
            }
    ?>
    

    如果您有其他疑问,请在下方评论并希望您能回答您的问题

    【讨论】:

      【解决方案4】:

      尝试为返回的数据设置正确的数据类型。

      $.ajax({
        url: 'script_admin-add-category.php',
        method: 'POST',
        data: {lExpensesId: lcl_ExpensesId},
        dataType: 'text',
        success: function (data) {
          if (data === 'YES') {
            alert('EMAIL')
          } else {
            alert(data)
          }
        }
      })
      

      【讨论】:

      • 嗨,没关系
      • 请在您的答案中添加一些解释,以便其他人可以从中学习
      猜你喜欢
      • 1970-01-01
      • 2018-01-01
      • 2016-10-13
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 2018-06-18
      • 2015-08-27
      相关资源
      最近更新 更多