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

如何在Sammy JS中满足特定参数时触发notFound响应

解决Sammy JS中验证失败时触发notFound的问题

核心要解决两个点:回调函数的上下文指向和正确调用Sammy的notFound机制,直接给你修改后的代码和解释:

this.get('#/projects/:url', function(){
  // 先把Sammy的路由上下文存下来,避免AJAX回调里this跑偏
  const self = this;
  
  $.ajax({
    type: "POST",
    url: 'package.php',
    data: { 'url-verify': this.params['url'] },
    success: function(data){
      if(data.success) {
        // 这里用self调用Sammy的方法,因为回调里的this不是路由实例
        self.load(`page.php?=${self.params['url']}`)
          .swap();
      } else {
        // 直接触发notFound处理
        self.notFound();
      }
    },
    // 额外加个error回调,请求失败时也触发404,体验更完整
    error: function() {
      self.notFound();
    }
  });
});

关键细节解释:

  • 上下文问题:AJAX的success回调里的this默认指向AJAX请求对象,不是Sammy的路由实例,所以我们提前把路由的this存到self变量里,这样在回调里就能正常调用Sammy的方法了。
  • 触发notFound:调用self.notFound()会直接触发你已经配置好的notFound处理逻辑——不管你是用this.notFound(function(){...})定义的全局404处理,还是有对应的404路由,这个方法都会走Sammy内置的404流程,比手动跳转到404路由更规范。

举个例子,如果你是这么配置notFound的:

this.notFound(function() {
  this.render('templates/404.html')
    .swap();
});

那调用self.notFound()就会直接渲染404模板,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:33:16