2010-12-02 10 views
4

Je suis en cours d'exécution XMLHttpRequest demande comme ceci:obtenir tout le corps de poste dans le contrôleur de CodeIgniter

var data = JSON.stringify({ 
    name : "123", 
    id : 12 
}); 

window.console.log("Submitting: " + data); 
var req = new XMLHttpRequest(); 
req.open('POST', "http://localhost/index.php/lorem/ipsum", true); 
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
req.onreadystatechange = function() { 
    if ( req.readyState==4) { 
     window.console.log("Sent back: " + req.responseText); 
    } 
} 
req.send(data); 

comme vous pouvez le voir il n'y a pas de nom pour le paramètre étant passé.

maintenant je veux lire que les données JSON dans ipsum fonction du contrôleur lorem. Comment puis-je faire cela? $this->input->post(); renvoie false :(

Répondre

7

Utilisez file_get_contents('php://input')

3

même si votre train d'amorcer un objet JSON dans corder votre ne pas attribuer une clé à la chaîne, ce que tant côté serveur ne dispose pas d'un identifiant pour votre chaîne

Ce que vous devez faire est.:

req.send("json=" + data); 

alors en cours d'utilisation de PHP.

$this->input->post("json"); 

Pour recevoir des données sans avoir besoin de paires de KV vous pouvez utiliser stdin je suppose

http://php.net/manual/en/wrappers.php.php

ou même en utilisant une variable prévue à cet effet:

$HTTP_RAW_POST_DATA

+0

merci pour votre réponse! Je sais que je peux faire ça comme ça. Je voulais savoir s'il y avait un autre moyen, sans identifiant. Peut être en quelque sorte pour recevoir le corps des demandes http. – David

+1

Oui, bien sûr, il y a 'fopen (" php: // stdin "," r ")' pour lire les entrées brutes, mais ce n'est pas la voie à suivre. – RobertPitt