не-AJAX jQuery POST запрос


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

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

            });
        });

эта функция должна перейти к комментариям.php страница с помощью значения в руке. его размещение штраф, но не перенаправление на комментарии.РНР.

@Doug Neiner уточнение:
1. У меня есть 15 ссылок (изображений). я нажимаю на ссылку, и она загружает мой javascript. JS знает, что я открыл wat imgnum. этот imgnum я хочу в комментариях.РНР. я должен использовать этот JavaScript и никакие другие средства могут делать трюк. JS является обязательным. 2. ваш метод успешно публикует значение помощи. но в комментариях.php когда я пытаюсь повторить это значение, он ничего не отображает. 3. Я использую Firebug. в консоли он показывает Эхо-запрос, который я сделал в шаге (2) успешно.

6 70

6 ответов:

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

во-первых, если вы не изменение данные на сервере, не используйте 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 и только метод "Аякс" и не может быть использован, чтобы сделать традиционный form представить, как вы описываете. Итак, чтобы иметь возможность публиковать значение и перейдите на новую страницу, нам нужно имитировать form пост.

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

  1. вы нажимаете на изображение, и ваш JS-код получает imgnum
  2. далее, кто-то нажимает на #see_comments
  3. мы создаем временную form С imgnum значение в нем, как скрытая поле
  4. мы отправляем эту форму, которая публикует значение и нагрузки comments.php страница
  5. код comments.php страница будет иметь доступ к опубликованной переменной (т. е. в PHP это будет $_POST['aid'])
$("#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();
});

хотя решение Дуга найнера не только правильно, но и наиболее полно объяснено, у него есть одна большая проблема: похоже, он работает только в Chrome.

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

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

Я думаю, что вы просите это сделать в комментариях.php ' и posting 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();
);

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

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

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

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

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

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