11
votes

Publier des données n'apparaissant pas dans CakePHP Controller

J'utilise Ajax sur un formulaire Knockout.js pour poster des informations que CakePHP devrait recevoir, cependant, le gâteau ne semble rien trouver. En outre, l'alerte n'apparaît pas malgré un statut de 200 (OK) à partir du message.

Voici l'AJAX P>

$.post("/orders/finalize_payment",{"customer_id":customer_id},function(data){
        alert('success');
 });


0 commentaires

6 Réponses :


1
votes

Question joliment formatée :)

Je suis à peu près sûr que j'ai la réponse, bien que je puisse me tromper ... Fondamentalement, $ ceci-> demande est un objet dans le gâteau et $ ceci-> Demande -> Data est une variable / matrice qui est une propriété de l'objet.

Les données que vous envoyez à Cake vont directement dans l'objet (si cela est même possible), pas dans le tableau DATA . C'est pourquoi lorsque le gâteau génère des formulaires à l'aide du HTMLhelper, les noms sont, par exemple data [utilisateur] [nom d'utilisateur] . .

Je pense que si vous mettez json.stringify ({"client": client_id}) dans un "DATA" tableau et envoyez cela, il devrait fonctionner. < / p>


4 commentaires

Je ne sais pas si je comprends ce que vous entendez par «dans un tableau de données». Je l'ai changé à ce qui suit et rien n'a changé JSON.Stringify ({"Données": [{"Client": Customer_id}]})


Je pense que vous devez vous débarrasser de JSON.Stringifiez et passez l'objet, c'est-à-dire: Data: {"Client": Customer_ID} ou si cela ne fonctionne pas alors: Données: { "Données": ["Client": Customer_id]}


Aucun de ceux qui ont travaillé. Sur une note latérale, j'ai changé $ ceci-> Demande-> Données à seulement $ Ceci-> Demande, et les données faisaient partie de ce tableau, et c'était vide. Aussi, nulle part, je n'ai rien vu de relatif aux valeurs que j'envoie.


Eh bien, j'ai fini par le changer vers JQuery's $ .post et cela a fonctionné. Je ne comprends pas pourquoi Ajax me donne un tel problème



17
votes

N'encodez pas les données postes comme JSON

Le code de la question n'apparaîtra dans aucun script PHP, la raison est la suivante: P>

contenttype: "JSON" P> blockQuote>

Ce n'est pas une demande codée de formulaire, donc par ex. Le code suivant: p> xxx pré>

va produire: p> xxx pré>

si vous souhaitez soumettre des données comme JSON, vous aurez besoin de Pour lire le corps de la demande brute: P>

$.ajax({  
    url: "/orders/finalize_payment",  
    type: "POST",  
    dataType: "json",  // this is optional - indicates the expected response format
    data: {"customer": customer_id},  
    success: function(){              
       alert("success");  
    }
});


0 commentaires

0
votes

regarder Cet article . Votre chaîne de données n'est probablement pas correcte. Par conséquent, CakePHP peut ne pas être capable de le mettre dans $ ceci-> Demande-> Data .


1 commentaires

L'utilisation de $ ceci-> Demande-> Data Indique la version 2.x, qui gère l'absence de la clé de données de niveau supérieur. Il est toujours utile de savoir que cela peut parfois agir de manière inattendue - par ex. Si vous soumettez {FOO: "bar", données: {Stuff: "zum"}} .



2
votes

Comme vous utilisez CakePHP, vous trouverez peut-être ajouter DemandeHandler à vos composants résout le problème.

public $components = array([snip], 'RequestHandler');


0 commentaires

2
votes

Utilisation de données brutes et JSON Vous pouvez utiliser:

  $this->MyModel->save($data).


0 commentaires

0
votes

utiliser print_r ($ ceci-> demande-> parames); xxx


0 commentaires