1

Сама проблема: в результате поиска по json документу к найденной строке необходимо добавить парочку дополнительных ячеек:

1) цифру 1..99 и 2) небольшое текстовое примечание, а кнопкой "go" получить всю строку с добавленным примечанием, например:

    | B11 | Ручка WB11 | 39 | ФИО,тел | 

Но получаю только пустой массив: Array(), как быть, может это реализовывается как-то не так?

p.s. json документ в упрощенном виде такой: [{"artikul":"A13","name":"Ручка WA13"}, .... }]

А обработчик res.php такой:

    `echo "<pre>";
    print_r($_POST);
    echo "</pre>";`

Результат на картинке Такой в итоге результат

 $(window).load(function(){
  $('#search').keyup(function(){

var searchField = $('#search').val(); var regex = new RegExp(searchField, "i");
$.getJSON('data.json', function(data) {

var output = '&lt;form id="formx" method="post" action="javascript:void(null);" onsubmit="call()"&gt;'; 
$.each(data, function(key, val){
 if ((val.name.search(regex) != -1) || (val.artikul.search(regex) != -1)) {
  output += '&lt;span&gt;' + val.artikul + ' &lt;/span&gt;';
  output += ' &lt;span&gt;'+ val.name +' &lt;/span&gt;';
  output += '&lt;span&gt;&lt;input type="text" class="mytext"&gt;&lt;input type="submit" value="Выбрать"&gt;&lt;/span&gt;&lt;br /&gt;';
 }
});  
  output += '&lt;/form&gt;';
  $('#update').html(output); // это вывод общей таблицы

});
}); });

/* 3) попытка получить из найденного массив без перезагрузки */ function call() { var msg = $('#formx').val(); $.ajax({ type: 'POST', url: 'res.php', data: msg, success: function(data) { $('#results').html(data); }, error: function(xhr, str){ alert('Возникла ошибка: ' + xhr.responseCode); } }); }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input class="instyle" type="search" name="search" id="search" autofocus />

<div id="update">вывод поиска</div>
<div id="results">вывод полной строки</div>
  • $.getJSON('data.json', function(data) { console.log(data) ; ... - что в консоли? –  Aug 29 '17 at 21:35
  • в консоли либо не так смотрю, ноничего не увидел кроме комментария о jquery 1.8.3, что там Метод getPreventDefault() является устаревшим. Для его замены используйте метод defaultPrevented. – Valentin Aug 29 '17 at 21:42
  • то есть Вы в колбэк $.getJSON('data.json', function(data) { не попадаете? –  Aug 29 '17 at 21:44
  • А, минуту, начинаю понимать. –  Aug 29 '17 at 21:48
  • честно говоря, понимаю, что моя форма должна отправлять всё в $_POST, но почему-то ничего не извлекается. – Valentin Aug 29 '17 at 21:48
  • У элемента form нет свойства value, то есть $('#formx').val(); вернет пустую строку. –  Aug 29 '17 at 21:50
  • а как же я добавлю свойства value ? как-то поменять json? консоль выдаёт Array [ Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, ещё 2… ] – Valentin Aug 29 '17 at 21:53
  • Что Вы имели в виду отправить на сервер в функции call? –  Aug 29 '17 at 21:54
  • "Что Вы имели в виду отправить на сервер в функции call?" - думал что таким образом метод call запустит функцию, т.е. отправит переменную msg. т.е. выполнит это $('#formx').val(); Но вы правы, эта часть не работает. – Valentin Aug 29 '17 at 22:45
  • В Вашей форме нет ни одного инпут-элемента с назначенным атрибутом name. Oна ничего на сервер не отправит. Объясните, что Вы хотите сделать. –  Aug 30 '17 at 00:53
  • Результат найденных совпадений набранной цифры "1" на скриншоте на сером фоне (отображается в
    найденное
    ), вот я хотел добавить к выбранной мной из списка строке еще пару элементов - так сказать цену (1...99) и комментарий с контактами клиента, поэтому и соорудил в конце таблицы инпут с "ценой" и кн "выбрать". А вот что делать с переменной output никак не въеду. т.е. в этом месте
    вывод общей строки
    пустой массив получился.
    – Valentin Aug 30 '17 at 07:41
  • немного изменил: output += ' '; output += ' '; output += ' '; output += '
    '; теперь переменная output собрала все атрибуты name из формы как я понимаю (извините, но js только пытаюсь изучить). Но результаты такие же array{} приходит пустой.
    – Valentin Aug 30 '17 at 09:44

1 Answers1

0

Не используйте элемент form и кнопку submit там, где Вам не нужно посылать на сервер всю форму:

$(window).load(function(){
  $('#update').on('click', '.choose', function(e) {
    var parentRow = $(this).closest('.row');
    $.ajax({
      type: 'POST',
      url: 'res.php',
      data: {
        artik: parentRow.find('.artik').val(),
        nam: parentRow.find('.nam').val(),
      },
      success: function(data) {
        $('#results').html(data);
      },
      error:  function(xhr, str){
        alert('Возникла ошибка: ' + xhr.responseCode);
      }
    });
  });

  $('#search').keyup(function(){
    var searchField = $('#search').val();
    var regex = new RegExp(searchField, "i");       
    $.getJSON('data.json', function(data) {
      var output = '<div id="formx">';  
      $.each(data, function(key, val) {
        if (val.name.search(regex) != -1 || val.artikul.search(regex) != -1) {
          output += '<div class="row">';
          output += ' <input class="artik" type="text" value="' + val.artikul + '"/>';
          output += ' <input class="nam" type="text" value="'+ val.name +'"/>';
          output += ' <input class="cena mytext" type="text"/>';
          output += ' <button type="button" class="choose">Выбрать</button>';
          output += '</div>';
        }
      });       
      output += '</div>';
      $('#update').html(output); // это вывод общей таблицы
    });
  });
});
  • Вот это да! мега круто! кажется начало проясняться ))) Огромное спасибо! – Valentin Aug 31 '17 at 06:03