Mam następujący wygenerowany link href na stronie listy produktów

<a title="Add to My Favourites" class="a2f-link" href="http://epicurium.localhost/by-lifestyle-diet/breakfast?sort=20a&amp;products_id=1838&amp;action=add_to_favourites">
    <img src="images/icons/favourites.png" alt="Add to My Favourites" title=" Add to My Favourites " width="16" height="16" class="fl_add" />
</a>

Plik php, który generuje ten link href to

public function add_to_favourites_link($products_id, $product_value) 
{
    if (!isset($this->icon)) {
        $this->icon = (FAVOURITES_LISTING_ICON == 'Font Awesome') ? FA_ADD_TO_FAVOURITES : zen_image(DIR_WS_IMAGES . 'icons/' . BUTTON_ADD_TO_FAVOURITES, BUTTON_ADD_TO_FAVOURITES_ALT, '', '','class="fl_add"');
    }

    $page_link = zen_href_link($GLOBALS['current_page_base'], zen_get_all_get_params(array('products_id', 'action')) . 'products_id=' . (int)$products_id . '&action=add_to_favourites');

    return ($this->favouritesEnabled) ? sprintf('<span class="a2f-wrap"><a title="%4$s" class="a2f-link" href="%2$s">%3$s</a><span class="a2f-value">%1$s</span></span>', $product_value, $page_link, $this->icon, BUTTON_ADD_TO_FAVOURITES_ALT) : '';
}

W innym pliku mam

case 'add_to_favourites':
  if (isset($_GET['products_id'])) {
    if (zen_has_product_attributes($_GET['products_id'])) {
      $messageStack->add_session('product_info', sprintf(CAUTION_PRODUCT_HAS_ATTRIBUTES, zen_get_products_name($_GET['products_id'])), 'caution');
          zen_redirect(zen_href_link(zen_get_info_page($_GET['products_id']), zen_get_all_get_params(array('action'))));
    } else {
      if (!(isset($_SESSION['customer_id']) && zen_not_null($_SESSION['customer_id']))) {
        $messageStack->add_session('login', CAUTION_LOGIN_REQUIRED_FOR_FAVOURITES, 'caution');
        $_SESSION['navigation']->set_snapshot();
        zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL')); 
      }
      $favourites = new favourites();
      $favourites->addToFavourites($_GET['products_id'], (FAVOURITES_SHOW_ON_ADD == 'true') ? 'favourites' : 'header');
      if (FAVOURITES_SHOW_ON_ADD == 'true') {
        zen_redirect(zen_href_link(FILENAME_FAVOURITES, '', 'SSL'));
      } else {
        zen_redirect(zen_href_link($current_page_base, zen_get_all_get_params(array('action', 'products_id'))));
      }
    }
  }
break;

Chcę to zmienić, aby działało przez AJAX, więc nie mam przeładowywania strony, ale szczerze mówiąc, nie mam pojęcia, od czego zacząć modyfikować łącze href w wywołanie AJAX. Jedynym AJAXem, jakiego kiedykolwiek próbowałem, było przesłanie prostego formularza za pomocą przycisku, w którym plik, do którego AJAX był powiązany, był specyficzny dla tego procesu, a nie część przełącznika.

Wyszukałem w Internecie i przez SO i nie znalazłem żadnych przykładów, jak to się robi.

Wszelkie rady i przykłady mile widziane!

1
Steph3071 19 grudzień 2019, 16:50
Nie jest jasne, w jaki sposób używana jest twoja kotwica. Możesz ograniczyć fragment kodu PHP do tego, co jest istotne (i odpowiednio go otagować). Jeśli to pytanie dotyczy funkcjonalności Zen, powinno być oznaczone jako takie.
 – 
isherwood
19 grudzień 2019, 16:53
W rzeczywistości zaczynam wątpić, czy pokazany przez ciebie znacznik kotwicy jest w ogóle istotny. To wydaje się być pytaniem PHP, albo musisz przestudiować ajax i postarać się zanim zadasz pytanie. Masz pytanie dotyczące PHP lub JavaScript?
 – 
isherwood
19 grudzień 2019, 16:57
Mogę zapewnić, że wygenerowany html, który opublikowałem, jest używany do wywołania przypadku „add_to_favourites”: zgodnie z opublikowanym. Jak stwierdziłem w moim pytaniu, w przeszłości wykonałem niewielką ilość AJAX, ale dotyczyło to przesłania formularza, a nie linku href z akcją. Szukałem w google informacji na ten temat i nic nie wymyśliłem. Jeśli nie chcę, aby strona była ponownie ładowana po zakończeniu akcji, muszę użyć AJAX, więc nie jest to pytanie PHP.
 – 
Steph3071
19 grudzień 2019, 17:08

1 odpowiedź

Nadaj identyfikator znacznikowi kotwicy i napisz skrypt dla AJAX

<a id="add_fav" href="javascript:void(0)" ..> img src="">...

$(document).on('click','#add_fav',function(){
   //write your ajax call here
   $.ajax({
      url : 'your_controller_method',
      type : 'GET', or "POST" select accordingly 
      data : {'product_id' : 1838,
             ....
          },
     dataType:'json',
     success : function(data) {              
          alert('Data: '+data);
         },
     error : function(request,error){
     }
   });
 })
or you can make javascript function and pass data to function and then set it to ajax data
1
Dave Newton 19 grudzień 2019, 17:39