Автор Тема: Проблем с ajax  (Прочетена 2010 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

sorko

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 24
Проблем с ajax
« -: 21 Септември 2016, 13:52:33 »
Здравейте, имам проблем с ajax... как ли не го мъчих и не става =, много съм зле като цяло с javascript-a :-[
Трябва да пратя две променливи (id и table) до cart.php които са ид-то на продукта и в коя таблица се намира.
В cart.php взимам инфото от таблиците и ги слагам/трупам в сесията и т.н. с php-то нямам проблем ще се опрявя.

Код: PHP
  1. echo '<input type="hidden" id="salads" value="salads">';
  2. echo '<input type="hidden" id="'.$row['id'].'" value="'.$row['id'].'">';
  3. echo '<button class="btn-warning btn-xs" onclick="add_cart()">' .$text_add. '</button>' .$row['price']. $text_currency.'</span></div>';
  4.  
При success трябва да апендва в един див но това ще се боря аз да го направя за да не ставам нахален.
Надявам се няма да е проблем да помогне някой, ще съм много благодарен.
« Последна редакция: 21 Септември 2016, 13:54:42 от sorko »

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 123
  • -Получени: 73
  • Публикации: 1002
  • Кибик
Re: Проблем с ajax
« Отговор #1 -: 22 Септември 2016, 13:22:33 »
С една дума искаш някой да ти направи функцията add_cart(), така ли?

п.п. ... покажи какво си направил досега!
« Последна редакция: 22 Септември 2016, 13:24:18 от HanKrum »
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

sorko

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 24
Re: Проблем с ajax
« Отговор #2 -: 22 Септември 2016, 16:42:31 »
Промених малко нещата след като изгледах някой друг урок за ajax...
Код: Javascript
  1. $(document).ready(function(){
  2.  
  3.   $('#load').click(load);
  4.  
  5. });
  6.  
  7. function load(){
  8.  
  9.   $.ajax({
  10.  
  11. url: 'http://localhost/cart.php',
  12.  
  13. type: 'POST',
  14.  
  15. data: {
  16.  
  17. cat_id:$('#cat_id').val(),
  18.  
  19. product_id:$('#product_id').val()
  20.  
  21. }
  22.  
  23. }).done(function(data){
  24.  
  25.   $('#content').append(data);
  26.  
  27. }).fail(function(er){
  28.  
  29. console.log('error');
  30.  
  31. })
  32.  
  33. }
  34.  

До момента имам напредък, взе да работи, сега как да реша продлема с id-тата на бутона и на полета тък като се герерират от цикъл ...т.е. трябва по някъкъв наюин да ги направя уникални но и да работи ajax-a.
« Последна редакция: 22 Септември 2016, 20:16:55 от sorko »

canon4o

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 18
  • -Получени: 33
  • Публикации: 324
Re: Проблем с ajax
« Отговор #3 -: 23 Септември 2016, 01:10:01 »
Тенденцията е да се използват "data" атрибути за джаваскрипта, а класовете за CSS, ID-тата вече рядко се ползват.

sorko

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 24
Re: Проблем с ajax
« Отговор #4 -: 23 Септември 2016, 18:12:52 »
Май не разбра какъв е проблемът.
Тъй като целия списък заедно с бутона се генерира от цикъл нещата не работят освен ако има само 1 запис в таблицата. Във въпросната таблица и ама 3 полета - цена, ид, и име аз пращам с Аякс ид-то и името на таблицата.. стоките са в различни таблици...
Трябва да направя Аякс да праща тези ид-та и име на таблицата за всеки продукт от и итерацията т.е. трябва да вървят комплект...
Ще кача малко по-късно част от кода за да стане по ясно

canon4o

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 18
  • -Получени: 33
  • Публикации: 324
Re: Проблем с ajax
« Отговор #5 -: 24 Септември 2016, 10:49:57 »
Да, май още не мога да разбера. Искаш като цъкнеш "добави" и да пращаш ajax request с данни id & table? Т.е. да добавиш продукта към кошницата ли?

sorko

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 24
Re: Проблем с ajax
« Отговор #6 -: 24 Септември 2016, 12:49:50 »
Да това е идеята. Ето как се генерират от цикъла продуктите, идеята е да прятя през аякс product_id и cat_id,  cat_id е името на таблицата имам още 2 такива цикъла и затова ми трябва таблицата. Ако има повече от 1 запис нещата не работят.

Код: PHP
  1.       <div class="panel-body">
  2.       <?php $sql = "SELECT * FROM salads WHERE id>0";
  3.       $query = mysqli_query($connection, $sql);      
  4.       while ($row = mysqli_fetch_assoc($query)) {
  5.       echo '<div class="clearfix food-list"><div class="pull-left">'.$row['salads_'.$lang.''].'</div><span class="pull-right">
  6.      <button class="btn-warning btn-xs" id="load">' .$text_add. '</button>' .$row['price']. $text_currency.'</span></div>';
  7.       echo '<input type="hidden" id="cat_id" value="salads">';
  8.       echo '<input type="hidden" id="product_id" value="'.$row['id'].'">';
  9.       }?>
  10.       </div>

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 123
  • -Получени: 73
  • Публикации: 1002
  • Кибик
Re: Проблем с ajax
« Отговор #7 -: 25 Септември 2016, 09:57:01 »
... ето ти пример от един мой проект за складова програма. Тъй като не знам колко реда ще има стоковата разписка или фактурата вземам броя на редовете на таблицата без нулевия, защото той е шапката на таблицата и правя цикъл от 1 до  $('table.prodavam tr').size() и обхващам всичко. Напъхвам данните в масив и JSON го пращам на сървъра за обработка и запис в БД.
Код: Javascript
  1. $('button.kraj').click(function () {
  2.         var pov = checkDual(), d = $('.red:last-child'), red = d.attr('id');
  3.         if (pov === true) {
  4.             alert('Има повторение на редове !!!');
  5.         } else {
  6.             if (confirm('Да запиша ли вече документа?')) {
  7.                 var z, k, zab = $('textarea.zab[name=zab]').val(), table = new Array(), plashtane = $('select.plastane').val(),
  8.                         padej = $('input[name=padej]').val();
  9.                 for (z = 1; z < $('table.prodavam tr').size(); z++) {
  10.                     k = z - 1;
  11.                     var cena, kod = $('.red').eq(k).children('td._kod').html();
  12.                     if (kod == '0') {
  13.                         cena = parseFloat($('.red').eq(k).children('td._cena').children('input').val());
  14.                         table[z - 1] = {
  15.                             id: $('.red').eq(k).children('td._nomer').attr('title'),
  16.                             kod: kod,
  17.                             cena: cena,
  18.                             mqrka: $('.red').eq(k).children('td._mqrka').children('select[name=mqrka_kod]').val(),
  19.                             produkt: $('.red').eq(k).children('td._prod').children('input[name=_prod]').val(),
  20.                             kol: $('.red').eq(k).children('td._kol').children('input[name=_kol]').val(),
  21.                             to: $('.red').eq(k).children('td._to').children('input[name=to]').val()
  22.                         };
  23.                     } else {
  24.                         cena = parseFloat($('.red').eq(k).children('td._cena').attr('title'));
  25.                         table[z - 1] = {
  26.                             id: $('.red').eq(k).children('td._nomer').attr('title'),
  27.                             kod: kod,
  28.                             cena: cena,
  29.                             produkt: $('.red').eq(k).children('td._prod').children('input[name=_prod]').val(),
  30.                             kol: $('.red').eq(k).children('td._kol').children('input[name=_kol]').val(),
  31.                             to: $('.red').eq(k).children('td._to').children('input[name=to]').val()
  32.                         };
  33.                     }
  34.                 }
  35.                 if (plashtane == '100') {
  36.                     plashtane = plashtane + '||' + padej;
  37.                 }
  38.                 $.ajax({
  39.                     type: 'POST',
  40.                     url: $('.root').attr('href') + 'prodavam/zapis/',
  41.                     data: {
  42.                         new_doc: 1,
  43.                         firma: $('select.firma[name=name]').val(),
  44.                         table: JSON.stringify(table),
  45.                         zab: zab,
  46.                         plashtane: plashtane
  47.                     }
  48.                 }).done(function (data) {
  49.                     if (data === '1') {
  50.                         alert('Записа мина успешно!');
  51.                         window.location = '../документи/ст.разписки/';
  52.                     } else {
  53.                         alert(data);
  54.                     }
  55.                     close_wait();
  56.                 }).fail(function () {
  57.                     servErr('F78');
  58.                 });
  59.             }
  60.         }
  61.     });
« Последна редакция: 25 Септември 2016, 10:00:59 от HanKrum »
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

canon4o

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 18
  • -Получени: 33
  • Публикации: 324
Re: Проблем с ajax
« Отговор #8 -: 25 Септември 2016, 10:39:41 »
Както ти казах, изполвай дата атрибути, а не id. Това основна грешка, което правиш. Не можеш да имаш повече от 1 id с еднакво име на страница. В момента както ти си го направил, в цъкъл, ще имаш много еднакви id-та. По този начин като се опиташ да достъпиш някой продукт, то в повечето случаи ще вземеш само последния елемент.

За целта на бутона добави трябва да имаш data-id="2" и data-cat-id="12", след което при натискане на бутона с $(this) взимаш стойностите на дата атрибутите и ги пращаш с ajax към сървъра.

sorko

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 24
Re: Проблем с ajax
« Отговор #9 -: 25 Септември 2016, 22:48:11 »
Пак не става от 2 часа се мъча ба*ти и смотания 5 реда код... къде ми е грешката така и не мога да разбера
Код: PHP
  1. while ($row = mysqli_fetch_assoc($query)) {
  2.       echo '<div class="clearfix food-list"><div class="pull-left">'.$row['salads_'.$lang.''].'</div><span class="pull-right">
  3.      <button class="btn-warning btn-xs" data-id="'.$row['id'].'" data-cat_id="salads" >' .$text_add. '</button>' .$row['price']. $text_currency.'</span></div>';
  4. }
  5. ?>

Код: Javascript
  1. $(document).ready(function(){
  2.   $('button').click(load);
  3. });
  4. function load(){
  5.  
  6.   $.ajax({
  7.     url: 'cart.php',
  8.     type: 'POST',
  9.     data: {
  10.       cat_id:$(this).data("data-id"),
  11.       product_id:$(this).data("data-cat-id")
  12.     }
  13.   }).done(function(data){
  14.     $('#content').append(data);
  15.   }).fail(function(er){
  16.     console.log('error');
  17.   })
  18. }
  19.  

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: Проблем с ajax
« Отговор #10 -: 26 Септември 2016, 09:05:53 »
Ми дефинирай какво "не става". Следи конзолата на браузъра за грешки, използвай console.log за да си дебъгваш кода.
На пръв поглед виждам това несъотвествие:
Код: Javascript
  1. data-cat_id="salads" >' .$text_add
Код: Javascript
  1. $(this).data("data-cat-id")
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!