2011-10-23 5 views
0

Ok, donc voici mon code JS/jQuery, mon fichier rate.php a simplement un print_r($_POST) en elle. Le problème est, le $_POST accepte rated comme la chaîne "Array", plutôt que le tableau réel comme je l'ai défini. Comment puis-je corriger ce code afin que PHP reconnaisse l'entrée JSON comme un tableau approprié, plutôt qu'une chaîne?POST, AJAX, et PHP: soumission JSON

var rated = {"key" : key , "value" : value}; 

$.ajax({ 
    type: "POST", 
    url: $(location).attr('protocol') + "//" + $(location).attr('hostname') + "/ajax/rate.php", 
    data: { 
    "rated" : rated 
    }, 
    success: function(data) { 
    alert(data); 
    } 
}); 

Tel est le message de sortie Je reçois:

Tableau ( [mot] => array )
Erreur fatale: peut être passée par référence Seules les variables dans .../ajax/rate.php sur la ligne X


EDIT: Il y a en fait plus de variables qui rated, mais aucun d'entre eux sont des tableaux (il n'y a donc pas un problème avec eux), alors je les ai coupé du code ci-dessus pour cause de brièveté.

Répondre

2

Lors du passage des données JSON à votre script php par ajax je recommande chaîne serait le codage des données JSON, puis l'analyse sur le côté serveur.

var rated = {"key" : key , "value" : value}; 
var rated_encoded = JSON.stringify(rated); 

$.ajax({ 
    type: "POST", 
    url: $(location).attr('protocol') + "//" + $(location).attr('hostname') +  "/ajax/rate.php", 
    data: { 
    "rated" : rated_encoded 
    }, 
    success: function(data) { 
    alert(data); 
    } 
}); 

Ensuite, vous devriez être en mesure d'accéder à la variable POST dans votre script PHP en utilisant $ _POST comme avec toute autre valeur scalaire. Une fois que vous avez la chaîne JSON 'rating_encoded' sur le côté serveur, l'analyser en un tableau associatif en utilisant json_decode de PHP().

if(isset($_POST["rated"])){ 
    $rated_json = $_POST["rated"]; 
    $JSONArray = json_decode($rated_json, true); //returns null if not decoded 
    //Values can now be accessed like standard PHP array 
    if($JSONArray !== null){ 
     $key = $JSONArray["key"]; 
     $value = $JSONArray["value"]; 
    } 
}  

que j'ai trouvé que cette méthode est très efficace pour transférer

0

C'est un tableau approprié, mais pas ce que vous attendez d'être. Ce que vous voulez probablement peut être atteint en passant simplement rated au paramètre data tel quel. C'est à dire.

var rated = {"key" : key , "value" : value}; 

$.ajax({ 
    type: "POST", 
    url: $(location).attr('protocol') + "//" + $(location).attr('hostname') + "/ajax/rate.php", 
    data: rated, 
    success: function(data) { 
    alert(data); 
    } 
}); 
+0

javascript données d'objet au serveur et vice versa (pour traduire des tableaux PHP en objets JavaScript valide à l'aide de json_encode de PHP()) Il y a en fait plus les variables qui ont été évaluées, mais aucune d'entre elles ne sont des tableaux (il n'y a donc pas de problème avec elles), donc je les ai supprimées du code ci-dessus pour des raisons de concision. – Matt

+0

@Matt, alors quelles sont les données de demande attendez-vous? Parce que non, vous passez le paramètre 'rated' avec la valeur' {"key": key, "value": value} 'et HTTP ne supporte pas l'imbrication des paramètres. –