2013-07-19 5 views
0

Voici mon JS:Comment utiliser dojo.xhrPost correctement?

<script> 
dojo.require("dijit.form.Button"); 

function sendText(){ 
    var button = dijit.byId("submitButton2"); 

    dojo.connect(button, "onClick", function(event){ 
    // The parameters to pass to xhrPost, the message, and the url to send it to 
    // Also, how to handle the return and callbacks. 
    var xhrArgs = { 
    //type: "POST", 
     url: "http://testjson.php", 
     content: dojo.toJson({key1:"value1",key2:"value2"},true), 
     handleAs: "text", 
     load: function(newContent){ 
     dojo.byId("response2").innerHTML = newContent; 
     }, 
     error: function(error){ 
     // We'll 404 in the demo, but that's okay. We don't have a 'postIt' service on the 
     // docs server. 
     dojo.byId("response2").innerHTML = "Message posted."; 
     } 
    } 
    dojo.byId("response2").innerHTML = "Message being sent..." 
    // Call the asynchronous xhrPost 
    var deferred = dojo.xhrPost(xhrArgs); 
    }); 
} 
dojo.ready(sendText); 
    </script> 

Voici mon PHP:

<?php 

foreach($_POST as $key => $val) echo '$_POST["'.$key.'"]='.$val.'<br />'; 

?> 

Le problème est que rien est retourné. Si je mets content au lieu de postData J'ai $ _POST [0] = '{', $ _POST [1] = 'k' etc caractère par caractère, limité à 1000. C'est un gros problème.

S'il vous plaît quelqu'un peut-il me dire ce que je fais mal? J'ai obtenu ce code directement sur le site du dojo, donc ça devrait aller.

Répondre

0

Le tableau php $_POST affiche uniquement les données codées en forme. Dans votre exemple, vous postez json, donc il n'apparaîtra pas directement dans $_POST.

Vous avez quelques options ici. Vous pouvez continuer à publier les données en tant que json et lire le fichier json POSTed directement à partir du flux d'entrée php: $data = json_decode(file_get_contents('php://input'));. C'est probablement le plus simple, et il remplace l'accès au tableau $_POST pour les données.

D'autres options incluent pas POSTer JSON (juste envoyer des données de formulaire codées) et POSTer JSON comme forme de données codées:

Dans ce cas, votre content deviendrait quelque chose comme

content: 'my_post_data='+dojo.toJson({key1:"value1",key2:"value2"}, true), (vous devrez peut-être changer handleAs FYI)

ensuite sur le côté serveur vous verriez probablement quelque chose comme

$_POST['my_post_data']= '{"key1":"value1","key2":"value2"}' qui pourrait être traitée par json_decode()

+0

merci de répondre, – idan

0

Je crois que votre content est envoyé caractère par caractère parce que vous convertissez votre objet de contenu en JSON. Selon the dojo.xhrPost documentation, la propriété content devrait être un objet JavaScript. J'espère que cela aide à résoudre votre problème.

Il est à noter que ce module est déconseillé en faveur de dojo/request/xhr, il est donc préférable de l'utiliser sauf si vous avez des exigences de version inférieures.

+0

thx les deux j'ai réussi à transmettre des données, élément par élément afin d'éviter les problèmes de taille. – idan