2014-06-13 7 views
0

C'est ma fonction javascript:En passant JSON PHP

function callRemoteService(requestId, sObjectId, bObjectId) { 
$.ajax({ 
    url: "../../../serviceRemoteEngine.php", 
    dataType: "json", 
    contentType: "application/json", 
    type: "POST", 
    timeout: 1000, 
    data: JSON.stringify({"requestId":requestId,"SOobjectId":sObjectId,"SBobjectId":bObjectId}), 
    success: function(remoteResponse){ 
     alert(remoteResponse.msg); 
    } 
}); 
} 

Et ceci est serviceRemoteEngine.php:

echo json_encode(array("msg" => $_POST["SOobjectId"])); 

La fonction est appelée avec ces paramètres:

callRemoteService('remove', 15, 0) 

La chose est-ce que, au lieu de voir 15 dans le message d'alerte, null est dis joué à la place.

Cependant, quand je change de fichier PHP dans: texte

echo json_encode(array("msg" => "message")); 

"message" est affiché avec alerte js.

Pourquoi?

Répondre

1

PHP s'attend à ce qu'une demande de publication/d'obtention ait des paires key=value. Vous envoyez sur une chaîne nue, donc c'est juste value. Comme il n'y a pas de clé, PHP ne peut pas (et ne mettra) rien dans $ _POST, puisqu'il n'y a pas de clé pour attacher le value à.

Essayez

data: {foo: JSON.stringify(...)} 

et

echo $_POST['foo'] 

à la place.

+0

Pas trop sûr de vous suivre comment 'array ("msg"=> $ _POST [ "SOobjectId"])' est juste une valeur vide? – JakeGould

+0

Code d'erreur. Inattendu ":", comme prévu ... – Sates

2

Vous n'avez pas besoin d'appeler JSON.stringify(), lors de l'envoi d'une requête ajax, car la fonction $.ajax() attend un tableau associatif de paramètres, pas une chaîne.

function callRemoteService(requestId, sObjectId, bObjectId) { 
    $.ajax({ 
     url: "../../../serviceRemoteEngine.php", 
     dataType: "json", 
     contentType: "application/json", 
     type: "POST", 
     timeout: 1000, 
     data: {"requestId":requestId,"SOobjectId":sObjectId,"SBobjectId":bObjectId}, 
     success: function(remoteResponse){ 
      alert(remoteResponse.msg); 
     } 
    }); 
} 
+0

Cela ne change rien ... les réponses dans les deux sens restent les mêmes. – Sates

0

Votre PHP pour le JSON est la suivante:

echo json_encode(array("msg" => "message")); 

Mais vous devriez voir si l'ajout d'en-têtes appropriés JSON va simplifiera les choses. Comme ceci:

$json_data = json_encode(array("msg" => "message")); 
header('X-JSON: (' . $json_data . ')'); 
header('Content-type: application/x-json'); 
echo $json_data; 

En outre, la lecture sur votre question, vous semblez vouloir être obtenir le $_POST["SOobjectId"] immédiatement & puis envoyé ce retour via JSON? Êtes-vous sûr que $_POST contient quelque chose? Dans votre fichier PHP avant de faire quoi que ce soit d'autre, faites ceci:

echo '<pre>'; 
print_r($_POST); 
echo '</pre>'; 

Ou faire pour le $_REQUEST pour voir si les données sont transmises:

echo '<pre>'; 
print_r($_REQUEST); 
echo '</pre>'; 

Peut-être que vous devez faire dans votre fichier PHP . Obtenez les données $_POST brutes via file_get_contents('php://input') puis décodez-le et manipulez-le de cette façon. Toute ma reprise, y compris cette idée-dessous:

$json_decoded_array = json_decode(file_get_contents('php://input'), true); 

$json_data = json_encode(array("msg" => $json_decoded_array['SOobjectId'])); 
header('X-JSON: (' . $json_data . ')'); 
header('Content-type: application/x-json'); 
echo $json_data; 
+0

Ce code affichera "message" de toute façon, comme le fait ma ligne. Les résultats sont les mêmes. – Sates

+0

@ user3027309 Ok, les idées finales en place. Je reçois maintenant votre code: JavaScript envoie les données POST à ​​PHP qui les renvoie ensuite à JavaScript. Vous devez donc réellement analyser les données POST brutes en PHP pour extraire les valeurs que vous voulez. Regardez ma dernière édition. – JakeGould