Использование функции jQuery .post в форме пользовательского шаблона WordPress

#jquery #ajax #wordpress #.post

#jquery #ajax #wordpress #.post

Вопрос:

В настоящее время я создаю пользовательскую контактную форму на сайте WordPress, которую пытаюсь отправить через ajax с помощью jQuery, однако, когда я выполняю функцию $.post, firebug сообщает об ошибке 404 в консоли, хотя я могу ввести URL в свою адресную строку и правильно отобразить страницу. Я не размещаю междоменную рассылку.

Вот пример моего кода, из которого удален нерелевантный код:

 <form action="" method="post" onsubmit="return submitContactForm()" class="contactform">
 <!-- inputs etc here -->
</form>

<script type="text/javascript">
function submitContactForm() {
  // Omitted error checking here, return false on error
  $.post('/contact'/, $('.contactform').serialize(), function(data) {
    alert(data);
    return false;
  });
  return true;
}
</script>
  

Сообщение никогда не выполняется успешно, и форма каждый раз отправляется «обычным» способом.

Я перепробовал множество комбинаций в части url $.post, включая /contact / , /contact , contact , /contact/, даже полный URL сайта, но безуспешно. У кого-нибудь раньше была эта проблема? Или я делаю что-то вопиюще неправильное? Мое единственное предположение — это что-то связанное с моей структурой / % postname% / permalink, кроме этого, я невежественен!

Любые идеи / соображения приветствуются

Спасибо, Энди

Комментарии:

1. что такое '/contact'/ ? На какой странице у вас есть данные, которые вы хотите запросить?

2. последующая обработка происходит в header.php файл моей темы WordPress. Поскольку файл .htaccess был отредактирован WordPress с помощью пользовательской структуры постоянных ссылок, / contact выводит меня на страницу «свяжитесь с нами», где header.php обрабатывается

3. какой URL-адрес firebug показывает вам при запуске ajax? Я не могу найти никакой информации об этом. Очень странно, что ни у кого нет этой проблемы.

Ответ №1:

Это в документации jQuery:

Это сокращенная функция Ajax, которая эквивалентна:

 $.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success
  dataType: dataType
});
  

Попробуйте это:

         $(function()
        {
            $("button#send").click(function() {
                $.ajax({
                    type: "POST",
                    url: "post.php",
                    data: $("#form").serialize(),
                    success: function(msg){
                        $("#msg_ok").html(msg);
                        $("#form").reset();
                        //alert(msg);
                    }
                });
            });
        });
  

Комментарии:

1. Спасибо, но это не факт, что данные не публикуются. Он пытается выполнить post, но не получает ответа от сервера

2. Извините, должен был опубликовать в качестве комментария.

Ответ №2:

Я, наконец, понял, что происходит. В основном ajax post выполнялся синхронно, поэтому до получения ответа скрипт продолжил обработку

Добавление async: false к вызову $.ajax решило проблему

Спасибо за помощь