You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击表格行通过POST请求在新标签页打开页面时空白页问题求助

表格行点击通过POST在新标签页跳转的问题解决

需求:实现表格行可点击,通过POST请求跳转到vehicledetails页面。现有代码能在当前页面加载目标页面内容,但调整后尝试在新标签页打开时,只得到空白页面,以下是所用代码,求解决:

原有表格行代码

<tr class="clickable" data-href="javascript:post2('vehicledetails',{weighing_id: {{row['weighing_id']}}})"> 
</tr>

原有点击事件代码

var elements = document.getElementsByClassName('clickable');
for (var i = 0; i < elements.length; i++) {
    var element = elements[i];
    element.addEventListener('click', function() {
        var href = this.dataset.href;
        if (href) {
           window.open(href);
       }
   });
 }

原有post2函数代码

function post2(path, params, method='POST') {
    var form_data = $(this).serialize();
    console.log(form_data)
    $.ajax({
            url: path, 
            type: method,      
            data: params,     
            cache: false,           
            success: function(data){                           
                $("#result").html(data);                      
            }           
        });    
};

问题原因

原来的思路存在本质问题:用window.open执行javascript:post2(...)时,新标签页的上下文是空的,post2里的AJAX请求只会往原页面的#result元素填充内容,新标签页根本没有这个元素,自然显示空白。而且javascript:协议在新标签页执行的方式本身就不符合POST跳转的需求。

解决方法

改用动态创建表单并提交的方式,这是实现POST请求在新标签页跳转的标准做法:

修改后的表格行

把data属性改成存储路径和参数,避免直接存JS代码:

<tr class="clickable" data-path="vehicledetails" data-weighing-id="{{row['weighing_id']}}">
    <!-- 这里放表格单元格内容 -->
</tr>

修改后的点击事件处理代码

// 用querySelectorAll更简洁,替代getElementsByClassName
document.querySelectorAll('.clickable').forEach(row => {
    row.addEventListener('click', function() {
        const targetPath = this.dataset.path;
        const weighingId = this.dataset.weighingId;

        // 1. 创建隐藏的POST表单
        const form = document.createElement('form');
        form.method = 'POST';
        form.action = targetPath;
        form.target = '_blank'; // 指定在新标签页打开
        form.style.display = 'none'; // 隐藏表单

        // 2. 添加POST参数
        const input = document.createElement('input');
        input.type = 'hidden';
        input.name = 'weighing_id';
        input.value = weighingId;
        form.appendChild(input);

        // 3. 提交表单
        document.body.appendChild(form);
        form.submit();
        // 提交后移除表单,清理DOM
        document.body.removeChild(form);
    });
});

移除原有post2函数

现在不需要原来的post2函数了,直接删除即可。


内容的提问来源于stack exchange,提问作者springsissor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:13:14