Je veux envoyer des données au format JSON à php et faire quelques opérations en php. Mon problème est que je ne peux pas envoyer de données json via ajax à mon fichier php.Veuillez m'aider, comment puis-je le faire. J'ai essayé de cette façon ..
<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>
Et dans PHP, j'utilise:
if(isset($_POST['myData'])){
$obj = json_decode($_POST['myData']);
//some php operation
}
Lorsque vous ajoutez print_r ($ _ POST) dans un fichier php, il affiche array (0) {} dans firebug.
Perdez le contentType: "application/json; charset=utf-8",
. Vous n'envoyez pas de JSON au serveur, vous envoyez une requête POST normale (qui contient une chaîne JSON).
Cela devrait faire ce que vous avez du travail.
Le fait est que vous n'avez pas besoin d'utiliser JSON.stringify
ou json_decode
du tout. Il suffit de faire:
data: {myData:postData},
Puis en PHP:
$obj = $_POST['myData'];
En effet, $_POST
est pré-rempli avec les données de formulaire.
Pour obtenir des données JSON (ou toute entrée brute), utilisez php://input
.
$json = json_decode(file_get_contents("php://input"));
Pour envoyer javascript obj à php en utilisant json et 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);
}
});
utiliser cet objet en php:
$obj = json_decode($_POST["myData"]);
echo $obj->var;
Je crois que vous pourriez essayer quelque chose comme ça:
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);
}
});
l'encodage JSON devrait se faire automatiquement, et un vidage de votre message devrait vous donner quelque chose comme:
array(
"bid"=>bid,
"location1"=>"1",
"quantity1"=>qty1,
"price1"=>price1,
"location2"=>"2",
"quantity2"=>qty2,
"price2"=>price2,
"location3"=>"3",
"quantity3"=>qty3,
"price3"=>price3
)
Si vous souhaitez obtenir les valeurs via la variable $_POST
, vous ne devez pas spécifier le contentType en tant que "application/json"
mais plutôt utiliser la valeur par défaut "application/x-www-form-urlencoded; charset=UTF-8"
:
JavaScript:
var person = { name: "John" };
$.ajax({
//contentType: "application/json", // php://input
contentType: "application/x-www-form-urlencoded; charset=UTF-8", // $_POST
dataType : "json",
method: "POST",
url: "http://localhost/test/test.php",
data: {data: person}
})
.done(function(data) {
console.log("test: ", data);
$("#result").text(data.name);
})
.fail(function(data) {
console.log("error: ", data);
});
PHP:
<?php
// $_POST
$jsonString = $_POST['data'];
$newJsonString = json_encode($jsonString);
header('Content-Type: application/json');
echo $newJsonString;
Sinon si vous voulez envoyer un JSON de JavaScript à PHP:
JavaScript:
var person = { name: "John" };
$.ajax({
contentType: "application/json", // php://input
//contentType: "application/x-www-form-urlencoded; charset=UTF-8", // $_POST
dataType : "json",
method: "POST",
url: "http://localhost/test/test.php",
data: person
})
.done(function(data) {
console.log("test: ", data);
$("#result").text(data.name);
})
.fail(function(data) {
console.log("error: ", data);
});
PHP:
<?php
$jsonString = file_get_contents("php://input");
$phpObject = json_decode($jsonString);
$newJsonString = json_encode($phpObject);
header('Content-Type: application/json');
echo $newJsonString;
il suffit de retirer:
...
//dataType: "json",
url: "index.php",
data: {myData:postData},
//contentType: "application/json; charset=utf-8",
...
Vous essayez d'envoyer un tableau js avec le format d'objet js.
Au lieu d'utiliser
var a = new array();
a['something']=...
essayer:
var a = new Object();
a.something = ...
Je sais que ça fait longtemps, mais juste au cas où quelqu'un en aurait encore besoin:
L'objet JSON que je dois transmettre:
0:{CommunityId: 509, ListingKey: "20281", Type: 10, Name: "", District: "", Description: "",…}
1:{CommunityId: 510, ListingKey: "20281", Type: 10, Name: "", District: "", Description: "",…}
Le code Ajax:
data: JSON.stringify(The-data-shows-above),
type: 'POST',
datatype: 'JSON',
contentType: "application/json; charset=utf-8"
Et le côté PHP:
json_decode(file_get_contents("php://input"));
Cela fonctionne pour moi, j'espère que cela peut aider!