Invio di JSON a PHP usando ajax

Voglio inviare alcuni dati in formato json su php e fare qualche operazione in php. Il mio problema è che non posso inviare dati json via ajax al mio file php. Per favore aiutatemi come posso farlo. Ho provato in questo modo ..

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

E in PHP io uso:

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

Quando aggiungi print_r ($ _ POST) nel file php, mostra array (0) {} in firebug.

Perdi il contentType: "application/json; charset=utf-8", Non stai inviando JSON al server, stai inviando una normale query POST (che per caso contiene una stringa JSON).

Questo dovrebbe rendere ciò che lavori.

Il fatto è che non hai bisogno di usare JSON.stringify o json_decode qui. Basta fare:

 data: {myData:postData}, 

Quindi in PHP:

 $obj = $_POST['myData']; 

Questo perché $_POST è pre- $_POST con i dati del modulo.

Per ottenere dati JSON (o qualsiasi input non elaborato), utilizzare php://input .

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

Per inviare javascript obj a php utilizzando json e ajax:

js:

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

per usare quell’object in php:

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

Credo che potresti provare qualcosa del genere:

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

la codifica json dovrebbe avvenire automaticamente e una copia del tuo post dovrebbe darti qualcosa del tipo:

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

basta rimuovere:

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

Si sta tentando di inviare array js con il formato object js.

Invece di usare

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

provare:

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

So che è passato un po ‘di tempo, ma nel caso qualcuno ne abbia ancora bisogno:

L’object JSON che devo passare:

 0:{CommunityId: 509, ListingKey: "20281", Type: 10, Name: "", District: "", Description: "",…} 1:{CommunityId: 510, ListingKey: "20281", Type: 10, Name: "", District: "", Description: "",…} 

Il codice Ajax:

 data: JSON.stringify(The-data-shows-above), type: 'POST', datatype: 'JSON', contentType: "application/json; charset=utf-8" 

E il lato PHP:

 json_decode(file_get_contents("php://input")); 

Funziona per me, spero che possa aiutare!