Nicht-AJAX-jQuery-POST-Anforderung

78

Ich versuche, die jQuery POST-Funktion zu verwenden, aber sie verarbeitet die Anforderung im AJAX-Stil. Ich meine, es geht nicht wirklich zu der Seite, auf der ich es sage.

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

        }
    );
});

Diese Funktion sollte gehen auf comments.php Seite mit Hilfe Wert in der Hand. Es ist in Ordnung zu posten, aber nicht zu comment.php umzuleiten .


@ Doug Neiner Klarstellung:

  1. Ich habe 15 Links (Bilder). Ich klicke auf einen Link und er lädt mein JavaScript. Das Skript weiß, was imgnumich geöffnet habe. Dies imgnummöchte ich in der Kommentare.php . Ich muss dieses JavaScript verwenden und kein anderes Mittel kann den Trick tun. Das JavaScript ist obligatorisch

  2. Ihre Methode veröffentlicht den Hilfswert erfolgreich. Aber wenn ich in der comment.php versuche, diesen Wert wiederzugeben, wird nichts angezeigt.

  3. Ich benutze Firebug. In der Konsole wird die Echoanforderung angezeigt, die ich in Schritt (2) erfolgreich durchgeführt habe.

amit
quelle
2
Äh? Umleiten? Vielleicht könnten Sie etwas mehr erklären, was Sie versuchen zu tun.
Metrobalderas
Befindet sich die Datei comments.php im selben Ordner wie die anfordernde Datei?
Rahul
Dieser SO-Beitrag kann helfen, stackoverflow.com/questions/1149454/…
DC
@ Metrobalderas: Ich denke, es ist ziemlich klar. @pulse: ja das ist es.
Amit

Antworten:

130

Ich weiß, was Sie versuchen zu tun, aber es ist nicht das, was Sie wollen.

Verwenden Sie zunächst keine Anforderung , es sei denn, Sie ändern Daten auf dem Server POST. Haben nur #see_commentsein normal sein<a href='/comments.php?aid=1'>...

Wenn Sie verwenden müssen , gehen Sie folgendermaßen vor POST, damit die Seite Ihrem Anruf folgt:

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

Wie das eigentlich funktionieren würde.

Erstens $.posthandelt es sich nur um eine AJAX-Methode, die nicht für eine herkömmliche Übermittlung verwendet werden kann form, wie Sie sie beschreiben. Um einen Wert veröffentlichen und zur neuen Seite navigieren zu können, müssen wir einen formBeitrag simulieren .

Der Fluss ist also wie folgt:

  1. Sie klicken auf das Bild und Ihr JS-Code erhält die imgnum
  2. Als nächstes klickt jemand auf #see_comments
  3. Wir erstellen ein temporäres Feld formmit dem darin enthaltenen imgnumWert als verstecktes Feld
  4. Wir senden dieses Formular, das den Wert veröffentlicht und die comments.phpSeite lädt
  5. Ihre comments.phpSeite hat Zugriff auf die veröffentlichte Variable (dh in PHP wäre dies der Fall $_POST['aid']).
Doug Neiner
quelle
Der Beihilfewert stammt aus der DB. also möchte ich wirklich, dass das jquery-ding funktioniert. da brauche ich auch mein Javascript.
Amit
@amit, in dem Code, den Sie veröffentlichen, stammt der aidWert nicht aus der Datenbank, die an die AJAX-Anforderung gesendet wird . Haben Sie nicht Ihre gesamte Funktion veröffentlicht?
Doug Neiner
@amit, dann ist deine Frage nicht klar. Mein Code-POST ist das Imgnum zur comments.phpDatei UND leitet gleichzeitig um. Was soll es sonst noch tun?
Doug Neiner
@amit, ich bin nicht anderer Meinung als Sie, woher sie imgnumkommen. Es ist nur so, dass meine Antwort genau Ihrem Code entspricht, außer der Weiterleitung. Versuchen Sie einfach, den $('form... .submit();Anruf mit Ihrem auszutauschen, $.postund prüfen Sie, ob er nicht genau das tut, was Sie möchten.
Doug Neiner
15
Sie sollten das Formular an das DOM anhängen, da IE und Firefox die Übermittlung ansonsten ignorieren würden (wenn Sie weitere, nicht ausgeblendete Felder hinzufügen möchten - z. B. Texteingaben -, wäre vor .appendTo () auch ein Aufruf von .hide () erforderlich. um ein Springen in den Inhalt zu vermeiden)
Gábor Nagy
54
$("#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();
});
devside
quelle
6
Dies sollte in der akzeptierten Antwort kombiniert werden. Ohne das Formular im DOM wird es nicht in Firefox und möglicherweise anderen Browsern gesendet.
JadedCore
10

Die Lösung von Doug Neiner ist zwar nicht nur richtig, sondern auch die am umfassendsten erklärte, sie hat jedoch ein großes Problem: Sie scheint nur bei Chrome zu funktionieren.

Ich zappelte eine Weile herum und versuchte, eine Problemumgehung zu finden, und stieß dann auf die zweite Antwort von nopnop77. Der einzige Unterschied ist der zusätzliche Code appendTo($(document.body)). Dann habe ich es in Firefox getestet und es hat wie ein Zauber funktioniert. Anscheinend müssen Firefox und IE das temporäre Formular irgendwo im DOM-Body anhängen.

Ich musste diese Implementierung für ein Symfony2-Projekt durchführen, da der Pfadgenerator in den .twigVorlagen nur mit GETParametern funktioniert und das Durcheinander mit der Abfragezeichenfolge die Sicherheit der App beeinträchtigt. (Übrigens, wenn jemand eine Möglichkeit kennt, .twig-Vorlagen zum Aufrufen von Seiten mit POST-Parametern zu erhalten, lassen Sie es mich bitte in den Kommentaren wissen.)

Mario Eduardo Castillo
quelle
3
Dies muss ein Kommentar sein, keine Antwort, es gibt nur mehr Informationen und Klarstellungen, es wird keine neue Antwort gegeben.
Leandro
4

Ich denke, was Sie fragen, ist, zu 'comments.php' zu gelangen und aidmit Wert zu posten imgnum. Die einzige Möglichkeit, dies zu tun, besteht darin, diesen Wert mit einem Formular einzureichen.

Sie können dieses Formular jedoch ausblenden und mit einem beliebigen Klick irgendwo mit jquery senden.

HTML notwendig (irgendwo auf der Seite platzieren):

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

js notwendig:

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

Dies wird zu 'comment.php' umleiten und den richtigen Wert senden imgnum(von dem ich annehme, dass Sie von irgendwo anders kommen).

Halloandre
quelle
-1

$.post()Sendet tatsächlich einige Daten an den Server. Es wird keine Umleitung verursacht, es sei denn, Sie tun dies in Ihrem serverseitigen Code, der die POST-Anforderung verarbeitet. Ich kann zwei Lösungen vorschlagen:

  1. Um zur Kommentarseite zu gelangen, können Sie anstelle des JQuery-Posts einfach ein 'Anker'-Tag verwenden <a href="comments.php?aid=1">Show Comments</a>.
  2. Wenn Sie JQuery durchgehen möchten, können Sie dieses Code-Snippet verwenden: $(location).attr("href", "comments.php?aid=1");
Veera
quelle
-2

hat das Problem nicht genau gelöst. aber hat es geschafft, es zu umgehen. Ich musste viele Änderungen am JS vornehmen, damit dies funktioniert, aber das Kernproblem dieser Frage wurde folgendermaßen gelöst:

    $("#see_comments").attr({href: "comments.php?aid='"+imgnum+"'"});

Dadurch wurde der Hilfewert an die URL angehängt, wie @Doug Neiner mir ursprünglich vorgeschlagen hatte. Vielen Dank Doug für die Mühe. Ich schätze wirklich. +1 und akzeptiere deine Antwort für die Mühe.

amit
quelle