Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending JSON to PHP using ajax

I want to send some data in json format to php and do some operation in php. My problem is i can't send json data via ajax to my php file.Please help me how can i do that. I have tried this way..

<script> $(function (){  $("#add-cart").click(function(){     var bid=$('#bid').val();     var myqty=new Array()     var myprice=new Array()      qty1=$('#qty10').val();     qty2=$('#qty11').val();     qty3=$('#qty12').val();      price1=$('#price1').val();     price2=$('#price2').val();     price3=$('#price3').val();      var postData =                  {                     "bid":bid,                     "location1":"1","quantity1":qty1,"price1":price1,                     "location2":"2","quantity2":qty2,"price2":price2,                     "location3":"3","quantity3":qty3,"price3":price3                 }     var dataString = JSON.stringify(postData);      $.ajax({             type: "POST",             dataType: "json",             url: "add_cart.php",             data: {myData:dataString},             contentType: "application/json; charset=utf-8",             success: function(data){                 alert('Items added');             },             error: function(e){                 console.log(e.message);             }     }); }); }); </script> 

And in PHP i use:

if(isset($_POST['myData'])){  $obj = json_decode($_POST['myData']);  //some php operation } 

When in add print_r($_POST) in php file, it shows array(0) {} in firebug.

like image 287
Abdullah Al Shakib Avatar asked Jun 08 '12 19:06

Abdullah Al Shakib


2 Answers

Lose the contentType: "application/json; charset=utf-8",. You're not sending JSON to the server, you're sending a normal POST query (that happens to contain a JSON string).

That should make what you have work.

Thing is, you don't need to use JSON.stringify or json_decode here at all. Just do:

data: {myData:postData}, 

Then in PHP:

$obj = $_POST['myData']; 
like image 183
Rocket Hazmat Avatar answered Oct 02 '22 14:10

Rocket Hazmat


That's because $_POST is pre-populated with form data.

To get JSON data (or any raw input), use php://input.

$json = json_decode(file_get_contents("php://input")); 
like image 34
Niet the Dark Absol Avatar answered Oct 02 '22 14:10

Niet the Dark Absol