Отправка JSON на PHP с помощью ajax

Я хочу отправить некоторые данные в формате json в php и выполнить некоторую операцию в php. Моя проблема в том, что я не могу отправить данные json через ajax в файл php. Пожалуйста, помогите мне, как я могу это сделать. Я пробовал этот путь ..

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

А в PHP я использую:

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

Когда в файле print_r ($ _ POST) добавлен файл php, он показывает массив (0) {} в firebug.

Потерять contentType: "application/json; charset=utf-8", Вы не отправляете JSON на сервер, вы отправляете обычный запрос POST (который содержит строку JSON).

Это должно сделать то, что у вас есть.

JSON.stringify json_decode здесь вообще не нужно использовать JSON.stringify или json_decode . Просто делать:

 data: {myData:postData}, 

Затем в PHP:

 $obj = $_POST['myData']; 

Это потому, что $_POST предварительно заполняется данными формы.

Чтобы получить данные JSON (или любой исходный ввод), используйте php://input .

 $json = json_decode(file_get_contents("php://input")); 

Чтобы отправить javascript obj в php с помощью json и ajax:

ЯШ:

 var dataPost = { "var": "foo" }; var dataString = JSON.stringify(dataPost); $.ajax({ url: 'server.php', data: {myData: dataString}, type: 'POST', success: function(response) { alert(response); } }); 

использовать этот объект в php:

 $obj = json_decode($_POST["myData"]); echo $obj->var; 

Я думаю, вы могли бы попробовать что-то вроде этого:

 var postData = { "bid":bid, "location1":"1","quantity1":qty1,"price1":price1, "location2":"2","quantity2":qty2,"price2":price2, "location3":"3","quantity3":qty3,"price3":price3 } $.ajax({ type: "POST", dataType: "json", url: "add_cart.php", data: postData, success: function(data){ alert('Items added'); }, error: function(e){ console.log(e.message); } }); 

json encode должен произойти автоматически, и свалка вашего сообщения должна дать вам что-то вроде:

 array( "bid"=>bid, "location1"=>"1", "quantity1"=>qty1, "price1"=>price1, "location2"=>"2", "quantity2"=>qty2, "price2"=>price2, "location3"=>"3", "quantity3"=>qty3, "price3"=>price3 ) 

просто удалите:

 ... //dataType: "json", url: "index.php", data: {myData:postData}, //contentType: "application/json; charset=utf-8", ... 

Вы пытаетесь отправить массив js с js-объектом.

Вместо использования

 var a = new array(); a['something']=... 

пытаться:

 var a = new Object(); a.something = ...