За последние 24 часа нас посетили 18872 программиста и 1639 роботов. Сейчас ищут 1646 программистов ...

Добрый вечер товарищи

Тема в разделе "JavaScript и AJAX", создана пользователем Dron-Boy, 12 дек 2016.

  1. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Отправляю форму по ajax на CMS opencart. Код рабочий тестил отдельно но что бы не было вопрос предоставлю. Все ок ответ приходит а вот данные с формы не уходят. почему не могу понять. и повторюсь тести отдельно данные с формы подхватывает и отправляет а вот на opencart почему то нет.

    котд js
    Код (Javascript):
    1. $("document").ready(function(){  
    2. $("#sub").click(function(){
    3.         var zapis = $("#zapis").serialize();
    4.         $.ajax({
    5.             url: 'add_option.php',
    6.             type: 'POST',
    7.             data: zapis,
    8.             beforeSend: function(){
    9.            
    10.             },
    11.             success: function (data) {
    12.                 alert(data);
    13.             }  
    14.         });
    15.         });
    16.  
    17.     });
    форма
    HTML:
    1. <tr>
    2.                     <form  id="zapis">
    3.                         <td style="padding:10px;"><?php echo $flag_skidka; ?></td>
    4.                         <td><input type="checkbox" name="skidka" ></td>
    5.                         <td style="padding:10px;"><?php echo $flag_new; ?></td>
    6.                         <td>  <input type="checkbox" value="name" name="new"> <br></td>
    7.                         <td style="padding:10px;"><?php echo $flag_original; ?></td>
    8.                         <td><input type="checkbox" name="original" ></td>
    9.                         <td style="padding:10px;">Id товара</td>
    10.                         <td><input type="checkbox"  checked value="<?echo $prod_id;?>" name="original" ></td>
    11.                 </tr>    <input type="text" name="name" value="">
    12.                 <tr>
    13.                         <td><input type="button" name="go"  id="sub" value="отправить"></td>
    14.                     </form>
    15.                 </tr>
    php
    PHP:
    1. if($_POST['flag_skidka'])
    2. {
    3.     $flag_skidka = $_POST['flag_skidka'];
    4. }
    5.  
    6. if($_POST['flag_new'])
    7. {
    8.     $flag_new = $_POST['flag_new'];
    9. }
    10.  
    11. if($_POST['flag_original'])
    12. {
    13.     $flag_original = $_POST['flag_original'];
    14. }
    15. if($_POST['prod_id'])
    16. {
    17.     $prod_id = $_POST['prod_id'];
    18. }
    19. if($_POST['name'])
    20. {
    21.     $name = $_POST['name'];
    22. }
    23. echo $name;
     
  2. Sandulf

    Sandulf Новичок

    С нами с:
    11 дек 2016
    Сообщения:
    8
    Симпатии:
    1
    Открой инстументы разработчика в хроме и посмотри, какой запрос реально передается на сервер.
    http://image.prntscr.com/image/7f5d32df8a45418b97c714e3da233229.png
    Если данные есть в запросе - копай php код, если нет - копай js. Ну и нам сообщи результаты, если сам не разберешься.

    И вот это:
    PHP:
    1. if($_POST['flag_new'])
    Лучше сделать вот так:
    Код (Text):
    1. if(isset($_POST['flag_new'])){
    2. ...
    3. }else{
    4. ... // задать значение по-умолчанию!
    5. }
    --- Добавлено ---
    А вот так и читать приятнее:
    PHP:
    1. $data = [];
    2. foreach(['flag_skidka','flag_new','flag_original','prod_id','name'] as $var){
    3.     if(isset($_POST[$var]))
    4.         $data[$var] = $_POST[$var];
    5.     else
    6.         $data[$var] = '';
    7. }
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    php что, где и почему:
    PHP:
    1. var_dump ( $_POST );
    --- Добавлено ---
    @Sandulf пример с foreach - это истинный говнокод.
     
  4. Sandulf

    Sandulf Новичок

    С нами с:
    11 дек 2016
    Сообщения:
    8
    Симпатии:
    1
    @MouseZver а как правильно? По-моему лаконично, без лишних строк. Мне интересно увидеть твой вариант.
     
  5. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    filter_input_array
     
    MouseZver нравится это.
  6. Sandulf

    Sandulf Новичок

    С нами с:
    11 дек 2016
    Сообщения:
    8
    Симпатии:
    1
    @Deonis Класс! Спасибо!
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    @Sandulf у меня другой отмаз был :D
     
  8. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Суть в том что эта строчкаvar zapis = $("#zapis").serialize() не подбирает данные именно в этом файле. И данные уходят пустыми. А вот когда этот же код использовав в новом файле все работает. В инструментах пишет все ок что бы посмотреть что ушло не нашел там поля form data.
     
  9. Sandulf

    Sandulf Новичок

    С нами с:
    11 дек 2016
    Сообщения:
    8
    Симпатии:
    1
    Значит ничего не уходит на сервер на самом деле. Тогда ищи ошибку в
    JS. Попробуй поставить брекпоинт в консоли браузера на своем коде, и по-выполнять куски кода в консоли, наблюдая за результатами. Я так подозреваю, что на странице есть несколько элементов с id="zapis" - в таком случае $("#zapis") не вернет ни одного. Так происходит только с id`ами. т.е. если написать $(".zapis") - вернет все элементы, у которых class="zapis".
    Как минимум, открой консоль, вставь туда код:
    Код (Javascript):
    1. $("#zapis").serialize()
    И нажми Enter, посмотри на результат.
    --- Добавлено ---
    Ну выкладывай, какие там еще есть варианты.:)
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    вот такие варианты :)
    Код (Javascript):
    1. $( 'body' ).on( 'submit', 'form#чызшв', function( e )
    2. {
    3.     e.preventDefault();
    4.  
    5.     var form = $( this );
    6.     var formData = new FormData( form.get(0) );
    7.  
    8.     $.ajax
    9.     ({
    10.         url: form.attr( 'action' ),
    11.         type: form.attr( 'method' ),
    12.         contentType: false, // важно - убираем форматирование данных по умолчанию
    13.         processData: false, // важно - убираем преобразование строк по умолчанию
    14.         data: formData,
    15.         dataType: 'HTML',
    16.         success: function ( data )
    17.         {
    18.             alert( data );
    19.         }
    20.     });
    21. });
    --- Добавлено ---
    но ничего не будет работать если тупо скопировать
     
    denis01 нравится это.
  11. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @MouseZver, делегирование - правильно, т.к.форма могла быть добавлена динамически. FormData - не принципиально в данном случае. form#чызшв - очепятка, но это и сам ТС поправит. А вот событие не катит. submit-а не будет, т.к. кнопка не имеет тип submit и в связи с этим preventDefault тоже лишний.
     
    denis01 нравится это.
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.799
    Симпатии:
    1.331
    Адрес:
    Лень
    лучше всего форму сделать как "обыкновенную" и подшить ее id zapis, аякс ее подберет, чем мудрить и функцию лепить на кнопку.
    --- Добавлено ---
    Это спецом :D
     
    denis01 нравится это.
  13. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Вобщен нашел в чем беда. я запихивал форму в форму. вобщем это страница добавления товаров и я записал в одну большую форму свою маленькую. опустил ниже и все кул) сенкс всем