web-dev-qa-db-fra.com

Envoi de JSON à PHP en utilisant ajax

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.

25

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'];
37
Rocket Hazmat

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"));
20

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;
9
Akhan Ismailov

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
)
4
ContextSwitch

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;
3
JedatKinports

il suffit de retirer:

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

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 = ...
1
xackobo

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!

0
Jack