2010-10-11 4 views
2

J'ai l'objet suivant qui est créé dans mon application javascript.Objet JSON Cant Post utilisant Jquery.post()

poll_data[active_question] = { 
     'question': $('div.question_wrap textarea').attr('value'), 
     'answers': [ 
      $('div.answer_wrap input#0').attr('value'), 
      $('div.answer_wrap input#1').attr('value'), 
      $('div.answer_wrap input#2').attr('value'), 
      $('div.answer_wrap input#3').attr('value'), 
      $('div.answer_wrap input#4').attr('value'), 
      $('div.answer_wrap input#5').attr('value') 
     ] 
    }; 

active_question est réglé sur 'vote', 0, 1, 2, 3, 4, ou 5 en fonction de la question en cours d'élaboration pour le moment. J'essaye de signaler cet objet à un manuscrit de php utilisant le code de JS suivant.

$.ajax({ 
     url:   '/somewebsite/poll/create?json=show', 
     type:   'POST', 
     // dataType:  'json', 
     data:   poll_data, 
     contentType:  'application/json; charset=utf-8', 
     success:  function(data) { 
      alert(data); 
     } 
    }); 

Mon code PHP est très simple.

echo json_encode($_POST); exit; 

Quand je lance le script et cliquez sur le bouton qui déclenche la transmission des données, je reçois l'alerte (de sorte que le code ajax réel fonctionne), mais le résultat de mon script PHP est juste un tableau vide. Je pense que c'est un problème avec la façon dont l'objet est construit, mais je ne suis pas sûr, et n'ai pas été capable de trouver un travail.

Merci d'avance.

+0

Il suffit donc de vérifier à tout le monde: le problème est pas sur le serveur. Le serveur ne reçoit pas les données, ce qui est le problème. –

Répondre

1

Ok, quelques petites choses:

poll_data est pas un objet JSON valide. Vous devrez utiliser poll_data [active_question], qui est un objet JSON valide. jQuery devrait sérialiser cela correctement. Enlevez le contentType - je suis assez sûr que c'est pour php (pas positif) mais votre code ne fonctionnerait pas pour moi jusqu'à ce que je l'aie enlevé. Enfin, l'ajout de json = show à la chaîne de requête ne fait rien ... il sera juste ignoré.

Quelques petites choses aussi: vous pouvez utiliser .val() au lieu de .attr('value'), et avez-vous regardé .serialize() pour créer vos données de poste pour vous?

+0

Ok, votre manque le point. Même si changer mon code PHP. echo var_dump ($ _ POST); Il n'y a pas de données, PHP ne reçoit pas l'objet JSON. –

+0

Édité ma réponse - j'espère que ça aide. –

+0

Ok, génial qui a beaucoup aidé. J'ai changé mon code javascript pour le suivant. \t \t $.ajax ({ \t \t \t url: \t \t \t '/ polple/poll/create', \t \t Type \t: \t \t \t 'POST', \t \t \t dataType: \t \t 'json', \t \t \t data: \t \t \t {'scrutation': poll_data ['sondage'], 'a': poll_data [0], 'b': poll_data [1]}, \t \t succès: \t \t fonction (données) { \t \t \t \t alerte (données); \t \t} \t \t}); Maintenant, tout semble fonctionner correctement. Je vous remercie également pour les commandes sur .val au lieu de .attr ("valeur"), et le? Json = show est en fait pour mon code PHP, il dit au code de sortie json au lieu de HTML. Merci pour l'aide. –

0

ce faire sur le serveur

$data; 
$data->question=$_POST['question'] 
$data->answer=$_POST['answers'] 
echo json_encode($data); 

faire pour demande ajax

$.ajax({ 
     url: '/somewebsite/poll/create?json=show', 
     type:'POST', 
     //modified data proprty 
     data:poll_data[active_question], 
     success: function(data) { 
      alert(data); 
     } 
    }); 
+0

problème avec ceci est qu'aucune donnée POST n'est disponible sur le serveur. –

+0

Si un faire un var_dump simple ($ _ POST); sur le serveur, j'obtiens le contenu suivant. array (0) {} –

+1

demande Méthode: POST Code d'état: 200 OK têtes de demande Accepter: application/JSON, text/javascript, */* Content-Type: application/JSON; charset = UTF-8 Origine: http: // localhost Referer: http: // localhost/polple/poll/create Agent-utilisateur: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.3 (KHTML, comme Gecko) Chrome/6.0.472.63 Safari/534.3 X-Requested-Avec: XMLHttpRequest En-têtes de réponse Cache-Control: pas de magasin, pas de cache, doit-revalider, post-vérification = 0, pré -check = 0 Connection: Keep-Alive Content-Length: 13 Content-type: text/html Keep-Alive: timeout = 5, max = 94 Pragma: no-cache –