如何在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
相关产品推荐
相关产品推荐

