Запит POST на jQuery, що не стосується AJAX


78

Я намагаюся використовувати функцію jQuery POST, але вона обробляє запит у стилі AJAX. Я маю на увазі, що це насправді не перехід на ту сторінку, на яку я кажу їй.

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

        }
    );
});

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


Роз’яснення @Doug Neiner :

  1. У мене 15 посилань (зображень). Я натискаю на посилання, і воно завантажує мій JavaScript. Сценарій знає, що imgnumя відкрив. Це imgnumя хочу в comments.php . Я повинен використовувати цей JavaScript, і жоден інший засіб не може зробити трюк. JavaScript є обов’язковим

  2. Ваш метод успішно розміщує значення допомоги. Але в comments.php, коли я намагаюся повторити це значення, воно нічого не відображає.

  3. Я використовую Firebug. У консолі він відображає ехо-ЗАПИТ, який я успішно зробив у кроці (2).


2
А? Перенаправлення? Можливо, ви могли б трохи більше пояснити, що ви намагаєтесь зробити.
metrobalderas

Чи є comments.php в тій самій папці, що і файл-запит?
rahul

ця публікація SO може допомогти stackoverflow.com/questions/1149454/…
DC,

@metrobalderas: Я думаю, це досить ясно. @pulse: так, це так.
13:00

Відповіді:


131

Я знаю, що ти намагаєшся зробити, але це не те, що ти хочеш.

По-перше, якщо ви не змінюєте дані на сервері, не використовуйте 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подання, як ви описуєте. Отже, щоб мати можливість опублікувати значення та перейти на нову сторінку, нам потрібно змоделювати formпублікацію.

Отже, потік такий:

  1. Ви натискаєте на зображення, і ваш код JS отримує imgnum
  2. Далі хтось натискає #see_comments
  3. Ми створюємо тимчасове formзі imgnumзначенням у ньому як приховане поле
  4. Ми подаємо ту форму, в якій розміщується значення та завантажується comments.phpсторінка
  5. Ваша comments.phpсторінка матиме доступ до опублікованої змінної (тобто це буде в PHP $_POST['aid'])

значення допомоги надходить від БД. так що я б дуже хотів, щоб річ jquery працювала. оскільки мені теж потрібен свій Javascript.
аміт

@amit, у коді, який ви публікуєте, aidзначення не надходить з бази даних, а надсилається до запиту AJAX. Ви не опублікували всю свою функцію?
Doug Neiner

@amit, тоді ваше запитання незрозуміле. Мій код POST є імгнемним comments.phpфайлом І одночасно перенаправляє. Що ще ти хочеш зробити?
Doug Neiner

@amit, я не погоджуюся з тобою, звідки imgnumпоходить, це просто те, що моя відповідь точно відповідає вашому коду, за винятком того, що він переспрямовує. Просто спробуйте поміняти $('form... .submit();дзвінок своїм $.postі перевірте, чи не робить він саме того, що ви хочете.
Дуг Нейнер

15
Вам слід додати форму до DOM, оскільки IE та Firefox ігноруватимуть надсилання в іншому випадку (якщо ви хочете додати більше, не прихованих полів - наприклад, введення тексту - тоді виклик .hide () також знадобиться перед .appendTo () щоб уникнути будь-яких стрибків у змісті)
Габор Надь

55
$("#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();
});

6
Це слід об'єднати у прийняту відповідь. Без форми в DOM він не подаватиметься у Firefox та потенційно інших браузерах.
JadedCore

Це також дає помилку без цього коду в Edge, щось на кшталт "Подання форми скасовано, оскільки форма не підключена". Вищезгадане рішення працює.
Ундрі

10

Хоча рішення Дага Нейнера не тільки правильне, але й найбільш вичерпно пояснене, воно має одну велику проблему: схоже, воно працює лише в Chrome.

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

Мені довелося зробити цю реалізацію для проекту Symfony2, оскільки генератор шляхів усередині .twigшаблонів буде працювати лише з GETпараметрами, а возиння з рядком запиту руйнує безпеку програми. (До речі, якщо хтось знає спосіб отримати шаблони .twig для виклику сторінок з параметрами POST, будь ласка, повідомте мене про це в коментарях).


3
це повинен бути коментар, а не відповідь, він лише надає більше інформації та роз'яснень, не є новою відповіддю.
Леандро

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(яке я припускаю, що ви отримуєте звідкись).


-1

Власне, $.post()відправляє деякі дані на сервер. Це не спричиняє перенаправлення, якщо ви не робите це в коді на стороні сервера, який обробляє запит POST. Я можу запропонувати два рішення:

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

-2

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.