9
votes

JQuery - $ .Ajax Post n'envoie pas .Data au serveur Web

J'utilise la commande jQuery $ .Ajax post pour appeler un événement AJAX sur mon serveur Web:

var formParams = "fe1=y&fe2=m&fe3=m";

$.ajax({
    type: 'POST',
    url: '/foo.jsp',
    async: false,
    data: formParams,
    complete: function(xmlRequestObject, successString){
        ymmReceiveAjaxResponse(xmlRequestObject, successString);
    }
});


1 commentaires

Cette question a été répondue dans d'autres threads, comme je suis tombé sur la cause du problème - en utilisant Firebug, et ouvrez l'ouverture de la filet Sniffer Do-Hicky, je constate que le serveur Web répond à un statut 302 sur l'appel à la page Web. Je vais décrire ma solution au problème dans un peu.


5 Réponses :


-1
votes

Utiliser succès : xxx


1 commentaires

S'il utilise succès ou complet n'a aucune incidence sur les données qui ne sont pas envoyées au serveur en premier lieu. (Et il peut utiliser complet s'il veut, ça fonctionne très bien. :-))



1
votes

Essayez ceci:

$.ajax({
    type: 'POST',
    url: '/foo.jsp',
    async: false,
    data: { fe1: "y", fe2: "m", fe3: "m" },
    complete: function(xmlRequestObject, successString){
        ymmReceiveAjaxResponse(xmlRequestObject, successString);
    }
});


1 commentaires

Mon erreur est que j'essayais d'accéder à $ _Post ["données"] .. mais si je voulais faire cela, je devrais l'avoir comme si Data: {Données: "Quelconvalue"}, .. Merci d'avoir nettoyé ça!



1
votes

Votre code comme cité est bien (je l'ai essayé localement).

Mon hypothèse est que la chaîne Formparams dans votre question n'est qu'un exemple, et en réalité, vous faites quelque chose pour générer cette chaîne à la volée et le problème réside dans que code à la place.

Par exemple, êtes-vous sûr de vous échapper des caractères Correctement (en utilisant Encodéqueur )? Ou mieux encore, laissez JQuery traiter avec elle, comme ceci: xxx

Si vous passez dans un objet, JQuery traitera le codage URI pour vous. Si vous vraiment veux le faire vous-même: xxx

là, je n'ai pas codé les noms de champs parce que ces noms n'ont pas de caractères spéciaux en eux; Vous devez si vos noms de formulaire sont plus intéressants que cela.


2 commentaires

Vous êtes totalement correct que c'est du code de stub; J'appellète réellement la méthode Serialize () sur un champ de formulaire IE - var guontams = $ ("# myform"). Serialize (); , et cela ne semble rien faire pour moi .


@MISSY: HMMM, Serialize gérera le codage pour vous, donc ce n'est pas ça. Fondamentalement, le code devrait fonctionner et fonctionne à cette fin, vous devrez donc passer à travers un débogueur et voir ce que l'envoi de JQuery en réalité. Ce pourrait être que JQuery fait son travail, mais pour une raison quelconque, la configuration acheminée la demande de votre JSP est gâchée.



5
votes

La cause du problème a été trouvée à l'aide de Firebug et ouvrant l'ouverture du gadget net.

Je constate que le serveur Web répond avec un état 302 de l'appel à la page Web.

Développement de la demande de 302 Demande de Firebug / Net, et examinez rapidement les paramètres, les en-têtes, la réponse et HTML a rapidement identifié qu'il s'agissait d'une question spécifique à l'application provenant du serveur.

Merci pour les commentaires de tous


0 commentaires

0
votes

Après avoir essayé de frustration pendant quatre heures, j'ai découvert qu'il est capable de le réaliser en définissant le contenttype code> dans Ajax post code> comme suit,

var dataToSend = {
     "username" : $("#username").val(),
     "password" : $("#password").val()
};

$.ajax({
   type: "POST",
   url: "somepage.jsp",
   data: dataToSend,  
   contentType: "application/x-www-form-urlencoded; charset=UTF-8", //this is must
   success: function(datum, msg, textStatus){
        $("#result").html("<h3>" + "Status : " + msg + "</h3>")
        .fadeIn("slow");
  }
});


0 commentaires