Sanju Menon
Sanju Menon

Reputation: 729

Get 2 variables from Ajax call in php

I am trying to get 2 variables from ajax in php. With one variable its working fine. New to ajax, so I am not sure how will I include a second variable. As of now I am getting the msg_count with out any issues. My ajax script is below:

function addmsg(type, msg) {

    $('#msg_count').html(msg);

}

function waitForMsg() {

    $.ajax({
        type: "GET",
        url: "notification/select.php",
        async: true,
        cache: false,
        timeout: 50000,

        success: function(data) {
            addmsg("new", data);
            setTimeout(
                waitForMsg,
                1000
            );
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            addmsg("error", textStatus + " (" + errorThrown + ")");
            setTimeout(
                waitForMsg,
                15000);
        }
    });
};

$(document).ready(function() {

    waitForMsg();

});

select.php script is below:

$sql = "SELECT * from notification where tousername='$tousername' and isread = 0";
       $result = $con->query($sql);
       $row = $result->fetch_assoc();
       $count = $result->num_rows;
       echo $count;
       $not=$row['notification'];
       echo $not;

I am able to pass the $count properly. I need to pass $not also to the ajax. How will I do that?

My edited php script to use it with a WHILE Loop is as follows:

$result= mysqli_query($con,"SELECT * from notification where tousername='$tousername' and isread = 0");

while($row = mysqli_fetch_array($result)) {
$count = $result->num_rows;
$not=$row['notification_msg'];
$res=[];
$res['count'] = $count;
$res['not'] = $not;       
echo json_encode($res);

Upvotes: 1

Views: 85

Answers (1)

Norlihazmey Ghazali
Norlihazmey Ghazali

Reputation: 9060

Like @guradio said, set dataType : 'json' inside ajax properties and json_encode data that you want to pass into success block like following code :

$.ajax({
   ....
   ....
   dataType : 'json', // added here
   success : function ( data ) {
     // access data from response
     // access it using data.count, data.not
     console.log(data)
     // just called like original code
     // passed on result `data`
     addmsg( type, data ); 
     // the rest of the code
   }
   ...
});

function addmsg(type, msg){
  // access it using msg.count, msg.not
  console.log(msg.count)
  $('#msg_count').html(msg);
}

In Php :

$sql = "SELECT * from notification where tousername='$tousername' and isread = 0";
$result = $con->query($sql);
$row = $result->fetch_assoc();
$count = $result->num_rows;       
$not=$row['notification'];
// added here
echo json_encode( array( 'count' => $count, 'not' => $not ) );

Edited : This depend on how you want to store the data and populate it

// defined container outside loop
$res = [];
while($row = mysqli_fetch_array($result)) {

  $count = $result->num_rows;
  $not=$row['notification_msg']; 
  array_push( $res, array( 'count' => $count, 'not' => $not ) );

}    

echo json_encode($res);

Suggestion(credited to guradio):

Must be noted that, there is not necessary to add async : true inside ajax properties as the default behavior of Ajax is asynchronous and the default value of that is TRUE unless you wanna it to be false, but not recommended.

Upvotes: 3

Related Questions