2016-07-28 1 views
2

Actuellement, j'ai un problème avec une API Angular2 et RoR5. J'essaie d'enregistrer un objet sur le serveur API, mais cela ne fonctionne pas.Aucune donnée dans les paramètres sur la requête POST

Voici mon code Angular2 pour le service:

createFrame(frameData) { 
    let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 
    let options = new RequestOptions({ headers: headers }); 
    let body = JSON.stringify({frame: frameData}); 
    return this.http.post(this.frameURL, body, headers).map((res: Response) => res.json()); 
} 

La demande est faite par mon navigateur et je peux voir les données JSON: enter image description here

Mais RoR ne peut pas obtenir le POST Les données.

[1] pry(#<Api::V1::FramesController>)> params 
=> <ActionController::Parameters {"format"=>:json, "controller"=>"api/v1/frames", "action"=>"create"} permitted: false> 
[2] pry(#<Api::V1::FramesController>)> 

Quelqu'un peut-il me dire ce qui ne va pas?

+0

Il semble que vous devrez peut-être ([permis] http://api.rubyonrails.org/classes/ActionController/Parameters.html) 'title',' is_photolini', etc. –

Répondre

1

Dans votre cas, vous définissez le type de contenu pour les données de formulaire et vous envoyez du contenu au format JSON. Soit vous utilisez des données de formulaire d'envoi ou du contenu JSON, soit

  • données de formulaire

    createFrame(frameData) { 
        let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 
        let options = new RequestOptions({ headers: headers }); 
        let form = new URLSearchParams(); 
        form.set('param1', 'some value'); 
        let body = form.toString(); 
        return this.http.post(this.frameURL, body, headers).map((res: Response) => res.json()); 
    } 
    
  • données JSON

    createFrame(frameData) { 
        let headers = new Headers({ 'Content-Type': 'application/json' }); 
        let options = new RequestOptions({ headers: headers }); 
        let form = new URLSearchParams(); 
        form.set('param1', 'some value'); 
        let body = form.toString(); 
        return this.http.post(this.frameURL, body, headers).map((res: Response) => res.json()); 
    } 
    
+0

Merci pour votre aide. J'ai eu une solution similaire, mais cela n'a pas fonctionné. Maintenant, j'ai trouvé le problème. Dans la ligne de retour, je passe la variable d'en-tête à la méthode post. Ce doit être des options à la place. Peut être que vous pouvez changer votre solution, ainsi elle pourrait être utile aux autres. – user39063

0

Le problème pourrait être lié à CORS (Cross Origin Resource Sharing)

ton pour permettre dans votre application -> Enabling cors Rails5

Bonne chance