Отправляю форму по ajax на CMS opencart. Код рабочий тестил отдельно но что бы не было вопрос предоставлю. Все ок ответ приходит а вот данные с формы не уходят. почему не могу понять. и повторюсь тести отдельно данные с формы подхватывает и отправляет а вот на opencart почему то нет. котд js Код (Javascript): $("document").ready(function(){ $("#sub").click(function(){ var zapis = $("#zapis").serialize(); $.ajax({ url: 'add_option.php', type: 'POST', data: zapis, beforeSend: function(){ }, success: function (data) { alert(data); } }); }); }); форма HTML: <tr> <form id="zapis"> <td style="padding:10px;"><?php echo $flag_skidka; ?></td> <td><input type="checkbox" name="skidka" ></td> <td style="padding:10px;"><?php echo $flag_new; ?></td> <td> <input type="checkbox" value="name" name="new"> <br></td> <td style="padding:10px;"><?php echo $flag_original; ?></td> <td><input type="checkbox" name="original" ></td> <td style="padding:10px;">Id товара</td> <td><input type="checkbox" checked value="<?echo $prod_id;?>" name="original" ></td> </tr> <input type="text" name="name" value=""> <tr> <td><input type="button" name="go" id="sub" value="отправить"></td> </form> </tr> php PHP: if($_POST['flag_skidka']) { $flag_skidka = $_POST['flag_skidka']; } if($_POST['flag_new']) { $flag_new = $_POST['flag_new']; } if($_POST['flag_original']) { $flag_original = $_POST['flag_original']; } if($_POST['prod_id']) { $prod_id = $_POST['prod_id']; } if($_POST['name']) { $name = $_POST['name']; } echo $name;
Открой инстументы разработчика в хроме и посмотри, какой запрос реально передается на сервер. http://image.prntscr.com/image/7f5d32df8a45418b97c714e3da233229.png Если данные есть в запросе - копай php код, если нет - копай js. Ну и нам сообщи результаты, если сам не разберешься. И вот это: PHP: if($_POST['flag_new']) Лучше сделать вот так: Код (Text): if(isset($_POST['flag_new'])){ ... }else{ ... // задать значение по-умолчанию! } --- Добавлено --- А вот так и читать приятнее: PHP: $data = []; foreach(['flag_skidka','flag_new','flag_original','prod_id','name'] as $var){ if(isset($_POST[$var])) $data[$var] = $_POST[$var]; else $data[$var] = ''; }
php что, где и почему: PHP: var_dump ( $_POST ); --- Добавлено --- @Sandulf пример с foreach - это истинный говнокод.
@MouseZver а как правильно? По-моему лаконично, без лишних строк. Мне интересно увидеть твой вариант.
Суть в том что эта строчкаvar zapis = $("#zapis").serialize() не подбирает данные именно в этом файле. И данные уходят пустыми. А вот когда этот же код использовав в новом файле все работает. В инструментах пишет все ок что бы посмотреть что ушло не нашел там поля form data.
Значит ничего не уходит на сервер на самом деле. Тогда ищи ошибку в JS. Попробуй поставить брекпоинт в консоли браузера на своем коде, и по-выполнять куски кода в консоли, наблюдая за результатами. Я так подозреваю, что на странице есть несколько элементов с id="zapis" - в таком случае $("#zapis") не вернет ни одного. Так происходит только с id`ами. т.е. если написать $(".zapis") - вернет все элементы, у которых class="zapis". Как минимум, открой консоль, вставь туда код: Код (Javascript): $("#zapis").serialize() И нажми Enter, посмотри на результат. --- Добавлено --- Ну выкладывай, какие там еще есть варианты.
вот такие варианты Код (Javascript): $( 'body' ).on( 'submit', 'form#чызшв', function( e ) { e.preventDefault(); var form = $( this ); var formData = new FormData( form.get(0) ); $.ajax ({ url: form.attr( 'action' ), type: form.attr( 'method' ), contentType: false, // важно - убираем форматирование данных по умолчанию processData: false, // важно - убираем преобразование строк по умолчанию data: formData, dataType: 'HTML', success: function ( data ) { alert( data ); } }); }); --- Добавлено --- но ничего не будет работать если тупо скопировать
@MouseZver, делегирование - правильно, т.к.форма могла быть добавлена динамически. FormData - не принципиально в данном случае. form#чызшв - очепятка, но это и сам ТС поправит. А вот событие не катит. submit-а не будет, т.к. кнопка не имеет тип submit и в связи с этим preventDefault тоже лишний.
лучше всего форму сделать как "обыкновенную" и подшить ее id zapis, аякс ее подберет, чем мудрить и функцию лепить на кнопку. --- Добавлено --- Это спецом
Вобщен нашел в чем беда. я запихивал форму в форму. вобщем это страница добавления товаров и я записал в одну большую форму свою маленькую. опустил ниже и все кул) сенкс всем