2015-08-03 1 views
0

Je rencontre un problème avec la requête REST de cowboy avec la méthode POST. Cela fonctionne très bien si le POST est effectué en soumettant le contenu du formulaire, mais il réagira lorsque j'utiliser AJAX pour envoyer du contenu POST au serveur.415 Support non pris en charge Type Cowboy REST Ajax

La réponse d'erreur est: 415 Type de support non pris en charge

Voici mon code pour content_types_provided et content_types_accepted

content_types_accepted(Req, State) -> 
    Handler = [ 
     {<<"text/html">>, handle_post_html}, 
     {{<<"application">>,<<"json">>, []}, handle_post_html}, 
     {{<<"text">>, <<"plain">>, []}, handle_post_html}], 
    {Handler, Req, State}. 

content_types_provided(Req, State)-> 
    Handler = [ 
     {<<"text/html">>, parse_html}, 
     {<<"application/json">>, parse_json}, 
     {<<"text/plain">>, parse_plain_text}], 
    {Handler, Req, State}. 

Tout organisme a une idée sur ce cas?

+0

Vous pouvez imprimer 'Req' et trouver le type de contenu qu'il contient. Je pense que vous devriez utiliser quelque chose comme "{" "application" >>, << "x-www-form-urlencoded" >>, []} ' –

+0

Oui, je l'ai déjà ajouté, mais quand le message fait par AJAX (XMLHTTPRequest) puis la réponse 415. Mais ça marche bien, si le post fait par le bouton submit du formulaire. –

Répondre

0

Pour le cow-boy comprend le type de contenu envoyé par XMLHttpRequest (AJAX) avec la méthode POST, en-têtes d'information doivent être ajoutés en JavaScript comme followng:

<script language="javascript"> 
var content_types = {html:'text/html',json:'application/json',text:'text/plain',xml:'application/xml'}; 
    $(document).ready(function(){ 
     $('#btnPost').on('click', function(e){ 
      e.preventDefault(); 
      var href = 'http://localhost:8080/account-insert-12.html', 
      var method = 'post', 
      var resType = 'json' 
      var postedData = $('#form').serialize(); 
      console.log(postedData); 
      $.ajax({ 
       headers: { 
        'Accept': content_types[resType], 
        'Content-Type': content_types[resType] 
       }, 
       url:href, 
       type: method, 
       dataType: resType, 
       data: postedData 
      }).done(function(res){ 

      }); 
     }); 
    }); 
</script> 
0

Pourquoi le séparer?

Essayez-:

content_types_accepted(Req, State) -> 
    Handler = [ 
     {<<"text/html">>, handle_post_html}, 
     {<<"application/json">>, handle_post_html}, 
     {<<"text/plain">>, handle_post_html}], 
    {Handler, Req, State}. 

content_types_provided(Req, State)-> 
    Handler = [ 
     {<<"text/html">>, parse_html}, 
     {<<"application/json">>, parse_json}, 
     {<<"text/plain">>, parse_plain_text}], 
    {Handler, Req, State}. 
+0

Oui, j'ai déjà essayé et toujours la même chose. Le séparateur est utilisé car j'ai besoin d'utiliser la méthode POST et PUT, car content_types_provided ne gère que l'en-tête (méthode GET), tandis que content_types_accepted gère le contenu de Boby (POST, PUT). –