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

如何重构不同class按钮点击时向同一地址发送AJAX请求的重复代码

优化方案

核心优化思路

  • 提取所有可变规则为统一配置,后续调整逻辑仅需修改配置,无需改动核心执行代码
  • 抽离公共AJAX请求逻辑,消除重复的请求配置、成功回调代码
  • 批量绑定事件,减少重复的事件注册代码

优化后完整代码

<script type="text/javascript" language="javascript" >
// 按钮规则配置:新增/修改按钮仅需调整此处即可
const btnActionConfig = {
  '.passed': {
    paramName: 'passed_id',
    paramVal: 3
  },
  '.retest': {
    paramName: 'retest_id',
    paramVal: 4
  },
  '.proof': {
    paramName: 'info_id',
    paramVal: 5
  }
}

// 公共AJAX请求逻辑
function sendTestAction(testId, paramName, paramVal) {
  $.ajax({
    url: "testmanagement.php",
    method: "POST",
    data: {
      test_id: testId,
      [paramName]: paramVal
    },
    success: () => location.reload()
  })
}

// 批量绑定所有按钮点击事件
Object.entries(btnActionConfig).forEach(([selector, config]) => {
  $(document).on('click', selector, function() {
    const testId = $(this).attr('id')
    sendTestAction(testId, config.paramName, config.paramVal)
  })
})
</script>

可选优化建议

  • 若后端接口可调整,建议统一请求参数名,比如所有请求都传action_id代替passed_id/retest_id/info_id,配置可进一步简化为{'.passed':3, '.retest':4, '.proof':5},代码更简洁
  • 建议将test_id存放到元素的data-*自定义属性中,比如<button class="passed" data-test-id="123">,取值时用$(this).data('testId'),避免和DOM元素的原生id属性用途冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:30:04