Не AJAX-запрос JQuery POST
Я пытаюсь использовать функцию POST jQuery, но она обрабатывает запрос в стиле AJAX. Я имею в виду, что это на самом деле не идет на страницу, я говорю это идти.
$("#see_comments").click(function() {
$.post(
"comments.php",
{aid: imgnum},
function (data) {
}
);
});
Эта функция должна перейти на страницу comments.php со значением помощи в руках. Это отправляет хорошо, но не перенаправляет на comments.php.
@Дуг Нейнер Уточнение:
-
У меня 15 ссылок (изображений). Я нажимаю на ссылку, и он загружает мой JavaScript. Сценарий знает, какой imgnum
я открыл. Это imgnum
я хочу в comments.php. Я должен использовать этот JavaScript, и никакие другие средства не могут добиться цели. JavaScript обязателен
-
Ваш метод успешно отправляет значение помощи. Но в comments.php, когда я пытаюсь отобразить это значение, ничего не отображается.
-
Я использую 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 и примите к вашему ответу за усилия.