【问题标题】:replacing href action with AJAX用 AJAX 替换 href 动作
【发布时间】:2020-04-12 03:11:55
【问题描述】:

我在产品列表页面上有以下生成的 href 链接

<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>

生成这个href链接的php是

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) : '';
}

在另一个文件中

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;

我想将其更改为通过 AJAX 工作,因此我没有重新加载页面,但老实说,我不知道从哪里开始将 href 链接修改为 AJAX 调用。 我曾经尝试过的唯一 AJAX 是通过一个按钮提交一个简单的表单,其中 AJAX 链接到的文件是特定于该进程的,而不是开关的一部分。

我在网上通过 SO 进行了搜索,但没有找到任何关于如何做到这一点的示例。

欢迎任何建议或示例!

【问题讨论】:

  • 不清楚你的锚是如何被使用的。您可能会将您的 PHP sn-p 精简到相关的内容(并正确标记它)。如果此问题依赖于 Zen 功能,则应将其标记为此类。
  • 事实上,我开始怀疑您显示的锚标记是否相关。这似乎是一个PHP问题,或者您需要学习ajax并在提问之前做出努力。你的问题是关于 PHP 还是 JavaScript?
  • @isherwood 我可以向您保证,我发布的生成的 html 用于触发案例 'add_to_favourites': 已发布。正如我的问题中所述,我过去做过少量的 AJAX,但它是用于表单提交,而不是带有操作的 href 链接。我在谷歌上搜索了一些关于这样做的信息,但一无所获。如果我不想在操作完成后重新加载页面,那么我需要使用 AJAX,所以这不是 PHP 问题。

标签: jquery ajax zen-cart


【解决方案1】:

为锚标签提供 id 并为 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2018-03-22
    • 2017-02-26
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多