Question

J'essaie de créer une demande POST. Malheureusement, le corps du message ne semble jamais être envoyé.

Vous trouverez ci-dessous le code que j'utilise. Le code est appelé lorsqu'un utilisateur clique sur un lien et non sur un formulaire "soumettre". bouton. Il fonctionne sans erreur, invoque le servlet appelé mais, comme je l’ai mentionné précédemment, le corps du POST ne semble jamais être envoyé.

Je peux valider que le corps de la demande n'est jamais envoyé, car j'ai accès au servlet appelé.

J'ai essayé d'utiliser les "paramètres". en remplacement de & request; requestBody. " J'ai également essayé d'utiliser une chaîne de paramètre (x = a? Y = b). J'ai également validé ce " ckULK " contient une valeur valide.

Des idées?

new Ajax.Request(sURL,
{
    method: 'POST'
    , contentType: "text/x-json"
    , requestBody: {ulk:ckULK}
    , onFailure:
        function(transport)
        {
            vJSONResp = transport.responseText;
            var JSON = eval( "(" + vJSONResp + ")" );
            updateStatus(JSON.code + ": " + JSON.message);
        } // End onFailure
    , onSuccess: 
        function(transport) 
        {
            if (200 == transport.status)
            {
                vJSONResp = transport.responseText;
            }
            else
            {
                log.value += "\n" + transport.status;
            }
         } // End onSuccess
}); // End Ajax.request
Était-ce utile?

La solution

C’est le genre de situations où Firebug et Firefox sont vraiment utiles. Je vous suggère d'installer Firebug si vous ne l'avez pas et de vérifier la demande qui est envoyée.

Vous devez également impérativement vous en tenir à paramètres au lieu de requestBody .

Ceci:

new Ajax.Request(sURL,
{
    method: 'POST',
    parameters: 'hello=world&test=yes',
    onFailure: function(transport) {
        vJSONResp = transport.responseText;
        var JSON = eval( "(" + vJSONResp + ")" );
        updateStatus(JSON.code + ": " + JSON.message);
    },
    onSuccess: function(transport) {
        if (200 == transport.status) {
            vJSONResp = transport.responseText;
        } else {
            log.value += "\n" + transport.status;
        }
     }
});

Devrait définitivement fonctionner.

Autres conseils

Transmettez simplement les données sous forme de paramètres au constructeur de la demande Ajax:

new Ajax.Request(url, {
  method: 'POST', 
  parameters: {
    hello: "world", test: "test"
  },
  onSuccess: function(transport){
    var data = transport.responseText.evalJSON();
  }
});

Lorsque j'ai rencontré ce problème, la solution a été de supprimer les options contentType des options Ajax.Request .

Dans répondre par Paolo Bergantino contentType n'est pas défini dans les options Ajax.Request .

Pour des raisons inconnues, les paramètres définis dans les paramètres n'ont pas été envoyés (FF ne les a pas affichés et mon serveur a vu le corps du POST vide).

L'un de mes collègues a suggéré d'utiliser postBody au lieu de paramètres mais je ne l'ai pas essayé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top