78 votes

Demande POST jQuery non-AJAX

J'essaie d'utiliser la fonction POST de jQuery mais elle traite la demande en style AJAX. Je veux dire qu'il ne va pas réellement à la page que je lui demande d'aller.

$("#see_comments").click(function() {
    $.post(
        "comments.php", 
        {aid: imgnum}, 
        function (data) {

        }
    );
});

Cette fonction devrait aller à commentaires.php page avec la valeur de l'aide en main. Il s'affiche bien mais ne redirige pas vers commentaires.php .


Doug Neiner Clarification :

  1. J'ai 15 liens (images). Je clique sur un lien et il charge mon JavaScript. Le script sait ce qu'il faut faire. imgnum J'ai ouvert. Ce imgnum Je veux dans le commentaires.php . Je dois utiliser ce JavaScript et aucun autre moyen ne peut faire l'affaire. Le JavaScript est obligatoire

  2. Votre méthode a POST avec succès la valeur de l'aide. Mais dans le commentaires.php lorsque j'essaie d'afficher cette valeur, rien ne s'affiche.

  3. J'utilise Firebug. Dans la console, la demande d'écho que j'ai faite à l'étape (2) est affichée avec succès.

2 votes

Euh ? Rediriger ? Tu pourrais peut-être expliquer un peu plus ce que tu essaies de faire.

0 votes

Le fichier comments.php se trouve-t-il dans le même dossier que le fichier de demande ?

0 votes

Ce post SO peut vous aider stackoverflow.com/questions/1149454/

132voto

Doug Neiner Points 34940

Je sais ce que tu essaies de faire, mais ce n'est pas ce que tu veux.

Premièrement, à moins que vous ne soyez en changeant sur le serveur, n'utilisez pas de fichier POST demande. Il suffit de #see_comments soit une normale <a href='http://stackoverflow.com/comments.php?aid=1'>...

Si vous ont à utiliser POST puis faites ceci pour que la page suive votre appel :

$("#see_comments").click(function() {
  $('<form action="comments.php" method="POST">' + 
    '<input type="hidden" name="aid" value="' + imgnum + '">' +
    '</form>').submit();
});

Comment cela pourrait fonctionner.

Premier $.post es sólo une méthode AJAX et ne peut pas être utilisée pour faire une form se soumettre comme vous le décrivez. Donc, pour pouvoir afficher une valeur y naviguer vers la nouvelle page, nous devons simuler une form poste.

Le flux est donc le suivant :

  1. Vous cliquez sur l'image, et votre code JS reçoit le message suivant imgnum
  2. Ensuite, quelqu'un clique sur #see_comments
  3. Nous créons un form avec le imgnum en tant que champ caché
  4. Nous soumettons ce formulaire, qui affiche la valeur y charge le comments.php page
  5. Votre comments.php aura accès à la variable affichée (c'est-à-dire qu'en PHP ce serait $_POST['aid'] )

0 votes

La valeur de l'aide provient de la base de données. j'aimerais donc vraiment que le truc jquery fonctionne. car j'ai aussi besoin de mon Javascript.

0 votes

@amit, dans le code que vous postez, l'élément aid La valeur ne provient pas de la base de données, mais elle est envoyé à la requête AJAX. N'avez-vous pas posté l'ensemble de votre fonction ?

0 votes

@amit, alors votre question n'est pas claire. Mon code envoie l'imgnum à l'adresse suivante comments.php ET redirige en même temps. Que voulez-vous qu'il fasse d'autre ?

58voto

nopnop77 Points 317
$("#see_comments").click(function () {
    $('<form action="comments.php" method="POST"/>')
        .append($('<input type="hidden" name="aid">').val(imgnum))
        .appendTo($(document.body)) //it has to be added somewhere into the <body>
        .submit();
});

7 votes

Ceci devrait être combiné dans la réponse acceptée. Sans le formulaire dans le DOM, il ne sera pas soumis dans Firefox et potentiellement dans d'autres navigateurs.

0 votes

Il donne une erreur sans ce code dans Edge également, quelque chose comme "Form submission canceled because the form is not connected". La solution mentionnée ci-dessus fonctionne.

10voto

Bien que la solution proposée par Doug Neiner soit non seulement correcte mais aussi la plus complète, elle présente un problème majeur : elle semble ne fonctionner que sur Chrome.

J'ai cherché pendant un certain temps une solution de contournement, puis je suis tombé sur la deuxième réponse de nopnop77. La seule différence est le code supplémentaire appendTo($(document.body)) . Puis je l'ai testé dans firefox et ça a marché comme sur des roulettes. Apparemment, Firefox et IE ont besoin que le formulaire temporaire soit attaché quelque part dans le DOM Body.

J'ai dû réaliser cette implémentation pour un projet Symfony2, car le générateur de chemin dans le fichier .twig ne fonctionneraient qu'avec GET et la modification de la chaîne de requête a eu des répercussions sur la sécurité de l'application. (BTW, si quelqu'un connaît un moyen de faire en sorte que les modèles .twig appellent des pages avec des paramètres POST, merci de me le faire savoir dans les commentaires).

3 votes

Ceci doit être un commentaire, pas une réponse, il ne fait que donner plus d'information et de clarification, ce n'est pas une nouvelle réponse fournie.

4voto

helloandre Points 5784

Je pense que ce que vous demandez est d'aller dans 'comments.php' et de poster aid avec valeur imgnum . La seule façon de le faire est de soumettre cette valeur avec un formulaire.

Cependant, vous pouvez rendre ce formulaire caché et le soumettre à un clic arbitraire quelque part avec jquery.

html nécessaire (à placer n'importe où sur la page) :

<form id='see_comments_form' action='comments.php' action='POST'>
    <input id='see_comments_aid' type='hidden' name='aid' value=''>
</form>

js nécessaire :

$("#see_comments").click(function(){
    $('#see_comments_aid').val(imgnum);
    $('#see_comments_form').submit();
);

Ceci redirigera vers 'comments.php' et enverra la valeur appropriée. imgnum (que je suppose que vous obtenez d'un autre endroit).

-1voto

Veera Points 5443

En fait, $.post() envoie des données au serveur. Il ne provoque aucune redirection, à moins que vous ne le fassiez dans votre code côté serveur qui traite la demande POST. Je peux suggérer deux solutions :

  1. Pour accéder à la page des commentaires, au lieu d'utiliser JQuery post, vous pouvez tout simplement utiliser une balise "anchor". <a href="comments.php?aid=1">Show Comments</a> .
  2. Ou si vous voulez passer par JQuery, vous pouvez utiliser cet extrait de code : $(location).attr("href", "comments.php?aid=1");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X