Отправка HTML-формы с помощью AJAX

#php #javascript #ajax #forms

#php #javascript #ajax #формы

Вопрос:

У меня есть форма:

 <form action="#" method="post" id="hubForm">
    <label class="labelText">Expiration Date:</label>
    <input class="datBox" type="text" id="cal" name="date">
    <div class="clr"></div>
    <div class="clr"></div>
    <label class="labelText">Hub Name</label>
    <input class="inputTxt" type="text" value="" name="name" />
    <div class="clr"></div>
    <label class="labelText">Description</label>
    <textarea class="textArea" name="desc"></textarea>
    <div class="clr"></div>
    <input class="submitButt" type="submit" value="" />
    <div class="clr"></div>
</form>
  

И у меня есть этот JavaScript:

 $('#hubForm').submit(function() {
    $.ajax({
        url: "hubControl.php",
        type: "post",
        data: $(this).serialize()
    });
});
  

И этот PHP-код:

 //Add the hub, task, or project to the database
mysql_query("INSERT INTO ".$type."s(".$IDvar.", name, description, users, expDate)
VALUES(".$ID.", "".$_POST['title']."", "".$_POST['desc']."", ".$ID.", ".$_POST['date'].")");
  

Но он отказывается добавлять что-либо в базу данных. Я переписал код для использования $_GET и протестировал PHP, и я убедился, что он работает.

Что касается JavaScript, я также пробовал такие вещи, как

 $.post("hubControl.php", $('#hubForm').serialize());
  

но, похоже, ничего не работает. Есть идеи?

РЕДАКТИРОВАТЬ: HTML-форма была предоставлена мне кем-то другим, поэтому я не знаю, на 100% ли она совместима с AJAX / JavaScript с такими вещами, как метод =»post». У вас у всех будет идея получше, чем у меня.

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

1. Можете ли вы протестировать с помощью Fiddler ot Firebug, чтобы увидеть, что публикуется на странице PHP.. кроме того, вы уверены, что $(this) ссылается на форму внутри вызова ajax.. Я не уверен, что контекстом этого является #hubForm ..

2. Я пробовал это без $this и вместо этого использовал $ (‘#hubForm’) и $ (‘hubForm’). Я попытаюсь использовать Firebug, но я с ним не знаком.

3. Похоже, у Бобби будет еще один полевой день: бобби-таблицы , которые

Ответ №1:

Если он работает с $ _GET, а не с $ _POST, похоже, что массив $ _POST заполняется неправильно.

Я бы рекомендовал вам начать работу с этим, просмотрев ваш массив $ _REQUEST или $ _POST при загрузке страницы. print_r($_POST) в некоторых тегах HTML pre может быть очень полезным.

Если вы знаете, что PHP даже не получает правильные данные, вы можете сосредоточиться на исправлении Ajax / jQuery.

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

1. Кроме того, пожалуйста, ознакомьтесь с внедрением MySQL и почему вы должны очищать любой пользовательский ввод с помощью mysql_real_escape();

2. Я использую диалоговое окно пользовательского интерфейса jQuery, поэтому, когда я пытаюсь напечатать что-либо на странице PHP, оно просто ничего не показывает. На самом деле, возможно, он вообще не попадает в файл PHP, насколько я знаю из моих тестов. Я также пытался создать функцию submit() и выполнить onClick() и поместить alert() в функцию, но ничего не произошло. Я попробую print_r($ _POST) через несколько минут и посмотрю, появится ли что-нибудь

3. Если вы введете print_r($POST) в свой журнал ошибок, будет очевидно, попадает ли на страницу даже запрос ajax .. попробуйте что-то вроде: $test = print_r($_POST,1); error_log(«—-POST——n».$test);

4. Это определенно происходит и получает значения, которые я отправляю. Это помогло мне найти проблему. Я распечатал свой SQL-запрос и, несмотря на то, что он работает с $ _GET, материал получается пустым и с лишними запятыми. Время работы над этим

Ответ №2:

Поскольку вы используете jQuery, вам следует рассмотреть возможность использования плагина ajaxForm. Он очень прост в использовании, вы можете просто добавить его в свой проект с минимальной настройкой.

Ответ №3:

Попробуйте использовать тип в верхнем регистре:

 $.ajax({
    url: "hubControl.php",
    type: "POST",
    data: $(this).serialize()
});