自定义服务页按钮:点击传递service_id并跳转至新页面
问题解决:点击按钮传递service_id并打开目标页面
核心问题分析
你当前的AJAX代码仅完成了后台POST请求,但AJAX是异步后台交互,不会触发浏览器打开新页面。要实现「点击按钮后传递参数并立即打开目标页面」,需要改用页面跳转或动态表单提交的方式,以下是两种可行方案:
方案1:GET方式跳转(最简单直观)
1. 优化Smarty模板(简化参数存储)
<a class="menuitm menu-auto" id="gotozabbixlist" data-service-id="{php} echo $_REQUEST['id']; {/php}"> <span>Zabbix host list</span> </a>
也可以保留你原来的hidden输入框,后续JS读取secretid的值即可
2. 修改JS点击事件
$('#gotozabbixlist').on('click', function (e) { e.preventDefault(); // 阻止a标签默认行为(如果存在) // 获取service_id let id = $(this).data('service-id'); // 或者用你原来的方式:let id = document.getElementById('secretid').value; // 构造带参数的URL并跳转 let url = 'http://www.website.com/bla/bla/zabbixhost.php?id=' + encodeURIComponent(id); window.open(url); // 打开新窗口,用location.href = url; 则跳转当前页面 });
3. zabbixhost.php接收参数
<?php print_r($_GET); // 用GET接收参数,也可以用$_REQUEST兼容GET/POST ?>
方案2:POST方式跳转(参数不暴露在URL)
如果需要隐藏参数,可通过动态创建表单提交实现:
1. 模板(同方案1,或保留原hidden输入)
<a class="menuitm menu-auto" id="gotozabbixlist" data-service-id="{php} echo $_REQUEST['id']; {/php}"> <span>Zabbix host list</span> </a>
2. 修改JS点击事件
$('#gotozabbixlist').on('click', function (e) { e.preventDefault(); let id = $(this).data('service-id'); let url = 'http://www.website.com/bla/bla/zabbixhost.php'; // 创建临时表单 let form = $('<form>', { 'method': 'POST', 'action': url, 'target': '_blank' // 打开新窗口,去掉则在当前页面提交 }); // 添加POST参数 form.append($('<input>', { 'type': 'hidden', 'name': 'someData', 'value': id })); // 提交并移除临时表单 form.appendTo('body').submit().remove(); });
3. zabbixhost.php接收参数(无需修改)
<?php print_r($_POST); ?>
内容的提问来源于stack exchange,提问作者Dmytro Kaminskyj
相关产品推荐
相关产品推荐

