Не AJAX-запрос JQuery POST

Я пытаюсь использовать функцию POST jQuery, но она обрабатывает запрос в стиле AJAX. Я имею в виду, что это на самом деле не идет на страницу, я говорю это идти.

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

        }
    );
});

Эта функция должна перейти на страницу comments.php со значением помощи в руках. Это отправляет хорошо, но не перенаправляет на comments.php.


@Дуг Нейнер Уточнение:

  1. У меня 15 ссылок (изображений). Я нажимаю на ссылку, и он загружает мой JavaScript. Сценарий знает, какой imgnum я открыл. Это imgnum я хочу в comments.php. Я должен использовать этот JavaScript, и никакие другие средства не могут добиться цели. JavaScript обязателен

  2. Ваш метод успешно отправляет значение помощи. Но в comments.php, когда я пытаюсь отобразить это значение, ничего не отображается.

  3. Я использую Firebug. В консоли отображается эхо-запрос, который я успешно выполнил на шаге (2).

Ответ 1

Я знаю, что вы пытаетесь сделать, но это не то, что вы хотите.

Во-первых, если вы не изменяете данные на сервере, не используйте запрос POST. Просто #see_comments будет нормальным <a href='/comments.php?aid=1'>...

Если вам нужно использовать POST, то сделайте это, чтобы страница соответствовала вашему вызову:

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

Как это реально работает.

Первый $.post - это только метод AJAX и не может использоваться для выполнения традиционного form submit, как вы описываете. Таким образом, чтобы иметь возможность опубликовать значение и перейти на новую страницу, нам нужно смоделировать пост form.

Итак, поток выглядит следующим образом:

  • Вы нажимаете на изображение, и ваш JS-код получает imgnum
  • Затем кто-то нажимает #see_comments
  • Мы создаем временное form с imgnum значением в нем как скрытое поле
  • Мы отправляем эту форму, которая отправляет значение и загружает страницу comments.php
  • Ваша страница comments.php будет иметь доступ к опубликованной переменной (т.е. в PHP это будет $_POST['aid'])

Ответ 2

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

Ответ 3

Хотя решение Doug Neiner не только корректно, но и наиболее полно объяснено, оно имеет одну большую проблему: он работает только в Chrome.

Я некоторое время ерзал, пытаясь определить обходной путь, а затем наткнулся на второй ответ nopnop77. Единственное отличие - это дополнительный код appendTo($(document.body)). Затем я протестировал его в firefox, и он работал как шарм. По-видимому, Firefox и IE должны иметь временную форму, прикрепленную где-то в теле DOM.

Мне пришлось выполнить эту реализацию для проекта Symfony2, так как генератор путей внутри шаблонов .twig работал только с параметрами GET, а беспорядок с строкой запроса искажал хаос с безопасностью приложения. (Кстати, если кто-то знает способ получить .twig шаблоны для вызова страниц с параметрами POST, пожалуйста, дайте мне знать в комментариях).

Ответ 4

Я думаю, что вы просите, чтобы перейти к 'comments.php' и опубликовать aid со значением imgnum. Единственный способ сделать это - отправить это значение в форме.

Однако вы можете сделать эту форму скрытой и отправить ее произвольным щелчком где-нибудь с jquery.

html необходимо (помещать куда угодно на страницу):

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

js необходимо:

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

это перенаправит на 'comments.php' и отправит правильное значение imgnum (что я предполагаю, что вы получаете откуда-то еще).

Ответ 5

Фактически, $.post() отправляет некоторые данные на сервер. Это не вызывает перенаправления, если вы не делаете это в своем коде на стороне сервера, который обрабатывает запрос POST. Я могу предложить два решения:

  • Чтобы перейти на страницу комментариев, вместо использования сообщения JQuery вы можете просто использовать тег "anchor" - <a href="comments.php?aid=1">Show Comments</a>.
  • Или, если вы хотите пройти через JQuery, вы можете использовать этот фрагмент кода: $(location).attr("href", "comments.php?aid=1");

Ответ 6

не решила проблему. но удалось обойти это. я должен был сделать много изменений для JS, чтобы выполнить эту работу, но основная проблема этого вопроса была решена, сделав следующее:

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

это добавило значение помощи в URL-адрес, поскольку изначально предлагал мне @Doug Neiner. Большое спасибо Дугу за все усилия. Я весьма признателен. +1 и примите к вашему ответу за усилия.