简体   繁体   中英

jQuery AJAX POST to PHP issue

I'm trying to evaluate the value of id , which should be passed in the POST from jQuery to PHP.

The call is returning {'id':'99'} , which is ok if id is not equal to 0. I wonder why ($x == "0") is not being evaluated to true in my PHP function.

Any help would be greatly appreciated! Thanks in advance.

jQuery:

$( document ).ready(function() {
    $.ajax({
        url: '/more.php',
        type: 'POST',
        data: JSON.stringify({"id" : "0"}),
        success: function(data) {
            $("body").append(data);
        }
    });
});

PHP:

if (isset($_POST['id'])) {
        $con=mysqli_connect("localhost","user","pass","schema");
        getmore($_POST['id']);

        function getmore($x) {
         if ($x == "0") {
          $sqldata = mysqli_query($con,"SELECT * FROM IRCLOG WHERE DATETIME >= date_sub(curdate(),interval 1 day)");
         }
         else {
          $sqldata = mysqli_query($con,"SELECT * FROM IRCLOG WHERE DATETIME >= date_sub(curdate(),interval 1 day)");
         }
           // your business logic
          $rows = array();
          while($r = mysqli_fetch_array($sqldata)) {
             $rows[] = $r;
          }

          echo json_encode($rows);
        }
    }
else {echo "{'id':'99'}";}

I think it might be because PHP is converting the $_POST['id'] to integer. Try the following:

function getmore($x) {
    $x = intval( $x );
    if ($x == 0) {

Another reason might be that your AJAX is sending the data incorrectly. Try using:

data: {id : "0"}

in the AJAX request.

The data setting in AJAX call accepts either PlainObject or String argument. From the docs:

It is converted to a query string, if not already a string. It's appended to the url for GET-requests. See processData option to prevent this automatic processing. Object must be Key/Value pairs. If value is an Array, jQuery serializes multiple values with same key based on the value of the traditional setting (described below).

Why don't you use

$(document).ready( function() {
    var id_main = 0;
        $.ajax ({
            type: "POST",
            url: "/more.php",
            data: { id: id_main },
    });
});

send your data like this. data: {"id" : "0"},

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM