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

使用Angular的state.go跳转至JSP页面失败问题排查

问题分析与解决方案

你的问题主要出在AngularUI Router的$state.go用法错误,还有几个关键的配置遗漏点,我一步步给你拆解:


1. 最核心的错误:$state.go的参数用错了

$state.go() 接收的是你在路由配置中定义的状态名称,而不是直接的URL路径。你现在写的 $state.go('/bookroom') 是把URL当成了状态名,这肯定跳不动。

举个例子,如果你在路由里定义了这样的状态:

angular.module('nr', ['ui.router'])
  .config(function($stateProvider, $urlRouterProvider) {
    // 默认路由(可选)
    $urlRouterProvider.otherwise('/');
    
    // 定义bookroom状态
    $stateProvider
      .state('bookroom', { // 这个就是状态名!
        url: '/bookroom', // 对应的URL路径
        templateUrl: '/path/to/your/bookroom.jsp' // 要跳转的JSP页面路径
      });
  });

那正确的跳转写法应该是:

$state.go('bookroom'); // 传状态名,不是URL

2. 模块依赖遗漏:没注入ui.router

你当前的模块定义是 angular.module('nr', []);,但AngularUI Router的$state服务属于ui.router模块,你必须把它注入到你的应用模块里,否则$state服务根本无法正常工作(可以打开浏览器开发者工具看看,大概率会报$state is undefined的错误)。

修改模块定义:

var nr = angular.module('nr', ['ui.router']); // 加入ui.router依赖

3. 额外检查点

除了上面两个核心问题,还有几个地方要确认:

  • 页面是否有ui-view指令:AngularUI Router需要在你的主页面(比如index.jsp)里加上<ui-view></ui-view>标签,用来渲染跳转后的视图内容,不然就算状态切换了,你也看不到JSP页面。
  • 确认POST请求确实进入了成功分支:可以在$state.go前面加个console.log('进入跳转分支了'),看看是否真的执行到了这一步,排除是POST请求没返回200的问题。
  • 按钮点击是否正确绑定方法:确保你的触发按钮用了ng-click="bookEdit.bookEdit()"(因为你把方法放在了$scope.bookEdit对象里),而不是ng-click="bookEdit()",否则方法不会被调用。

修正后的代码片段参考

<script> 
var nr = angular.module('nr', ['ui.router']); // 注入ui.router依赖

// 配置路由
nr.config(function($stateProvider, $urlRouterProvider) {
  $urlRouterProvider.otherwise('/');
  
  $stateProvider
    .state('bookroom', {
      url: '/bookroom',
      templateUrl: '/bookroom.jsp' // 这里换成你实际的JSP路径
    });
});

nr.controller('nController', ['$scope', '$http', '$state', function ($scope, $http, $state) { 
  $scope.bookEdit = { 
    bookEdit: function () { 
      $http({ 
        method: 'POST', 
        url: '/book/edit', 
        data : $scope.nredit 
      }).then(function successCallback(response) { 
        if (response.status == 204) { 
          // 处理204逻辑
        } else if (response.status == 200) { 
          $scope.nredit = { }; 
          console.log('准备跳转');
          $state.go('bookroom'); // 用状态名跳转
        } 
      }, function errorCallback(response) { 
        alert(JSON.stringify(response)); 
      }); 
    }
  };
});
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:59:22