簡體   English   中英

AJAX函數無法從PHP獲得正確的響應?

[英]AJAX function is not getting the correct response from PHP?

我已經在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({
  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)
    }
  }
})

@J Salaria,因為我了解您的問題,您在使用jquery AJAXPHP代碼時遇到了問題,因為您沒有得到想要的結果。 有多種通過jquery ajax發送數據的方法,我將對此進行詳細說明。

$_POST["lExpensesId"]是從HTML <form>獲取此ID嗎。因為在這里,我將向您展示3種通過ajax發送數據的實踐方法。

注意:您的代碼容易受到SQL傷害。 我還將向您展示克服的方法。如果您想了解有關SQL注入的更多信息,請單擊此鏈接。SQL注入鏈接

HTML表單代碼:

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

發送數據的第一種方法是通過HTML <FORM>

 <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 <FORM>

    <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();編寫PHP代碼mysqli_real_escape_string(); 反對SQL注入

    <?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->PREPARED其他PHP代碼MYSQLI->PREPARED SQL MYSQLI->PREPARED更好

<?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();
        }
?>

如果您有其他疑問,並希望在下面發表評論,我希望您能回答您的問題

所有方法都是已知的,非常感謝您的協助。 我的問題是為什么我無法從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腳本。 我在數據庫中有一個食品。 當我鍵入“ F”時,我將繼續,“ O”-繼續,“ O”-繼續,“ D”-ok ....當我鍵入D時,我應該得到“ Inserted”而不是Ok ....這是我的疑問,為什么我要得到這個????

上面的問題通過在PHP中使用exit()語句解決,因為我在值之后得到了5個字符,這意味着我有5行html而不關閉?>。 因此,解決此問題的最佳方法是根據需要在PHP中使用exit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM