【问题标题】:form's get method vs angular $http.get request表单的 get 方法与角度 $http.get 请求
【发布时间】:2018-04-22 18:17:52
【问题描述】:

我想通过我的 Angular 前端向 expressjs 后端发出对特定 url 的获取请求,如果我这样做的话,现在在我的前端:-

 <li>
      <a ng-click="givequiz()">GiveQuiz</a> 
 </li>

我的角码是:-

$scope.givequiz=function(){
    console.log("give quiz");
    $http.get('/home/givequiz').then(function(res){
      //request is going fine and all
});
}

上面的东西正在工作,但我得到的响应是一个对象,完整的文件和 url 并没有改变。

但是如果我做表格得到的东西:-

<li>
       <form action="http://localhost:8000/home/givequiz" method="GET">
          <button type="submit">Give Quiz</button>
       </form> 
</li>

这会将我带到一个名为“http://localhost:8000/home/givequiz”的新网址 但 $http.get 不为什么会这样?两种方法不一样吗?这就是我处理这两个请求的方式。

router.get('/givequiz', function(req, res, next) {
    console.log("in getquiz");
//always gets printed ^ means all reqs come here
    res.sendFile('/givequiz.html',{ root: client });
});
      Any help will be much appreciated.      

【问题讨论】:

  • 在第一种情况下,您应该手动更改路线。

标签: javascript angularjs node.js get


【解决方案1】:

听起来您的代码运行良好。 Angular 在幕后发出 AJAX 类型的请求。如果您想在响应成功返回时更改路线,您应该这样做:

$http.get('/home/givequiz').then(function(res){
    // request is going fine and all
    $state.go(nameOfState)
});

您也可以在 then resolve 块中设置 window.location,但这可能会导致页面刷新,而 state.go 不应该。

【讨论】:

  • 为什么表单的 get 场景会重定向到“givequiz”,而 ajax get 只是将该页面作为响应发送?
  • 以前在网络世界中,您必须重新加载页面才能发出请求。在新世界中,您可以在幕后提出请求。这称为 AJAX 请求。这是您不想重新加载页面但只想从服务器获取更多信息的时候。 Angular 正在发出 AJAX 类型的信息请求。当它解决您的代码时,它会告诉它下一步该做什么。鉴于 Angular 可以在不刷新页面的情况下更改状态,这在 Angular 世界中非常有用。
  • 我怎样才能发送一个 Ajax 请求并获取新页面而不是作为响应?
  • 对于 Ajax 请求,您不会倾向于从服务器请求新的 HTML 页面。您倾向于请求信息,例如客户列表或其他内容。如果你想改变角度状态,只需执行类似 ... $state.go('/home/givequiz') 或者如果你不介意页面刷新 ... window.location = fullDomain + '/home/givequiz'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多