2016-10-04 87 views
0

我有一个工作角形式坐在应用程序(导轨应用程序)内。它发送一个get请求到一个rails服务器。角度获取请求

问题是,如果这个应用程序收到一个正常的请求,它会刷新页面。但是,当通过角度发送请求时,我可以在服务器上看到请求,但该页面从不刷新。 (我可以使用这些获取请求来获取数据)。

问题是如何以角度形式传递get请求,以便服务器正常处理它并刷新页面?

HTML:

<form ng-submit="submitForm()" style="margin-top:30px;"> 
    <h3>get request</h3> 
    <button type="submit" class="btn btn-primary">Get</button> 
</form> 

app.js控制器:

$scope.submitForm = function(){ 
    posts.factorySubmit(); 
}; 

app.js工厂获得功能:

o.factorySubmit = function() { 
     $http.get('http://localhost:8080/clients'); 
}; 

--side注 - 如果我创建了一个GET请求,在应用程序中使用常规的java脚本,在角度上下文之外,我得到预期的行为,页面刷新。

+0

'$ http.get'是一个AJAX调用,它不会刷新页面。但通常你不想在角度应用中重新加载页面。你为什么要重新加载它? – nagyf

+0

是否要重新加载以显示来自GET的数据? – Wandrille

+0

我需要服务器处理一系列在rails中发生的逻辑,并用该新逻辑重新加载页面。基本上,我不想重写角度上的所有逻辑.. – HoosierCoder

回答

4

你已经把你的$ http包装在一个非常好的工厂里。你没有做的是捕捉到回应。

o.factorySubmit = function() { 
     // Add a return here 
     return $http.get('http://localhost:8080/clients'); // This call returns a promise 
}; 

然后当你调用这个函数...

$scope.submitForm = function(){ 
    posts.factorySubmit().then(function(response) { 
    $scope.requests = response.data; // This is where you get your response 
    }, 
    function(response) { 
    // This is your error handling 
    }); 
}; 

很酷的事情有关的角度是,它会发现变化并自动更新页面。它有一个摘要循环,内部响应变化而被调用。由于您使用的是内置的$http提供程序,因此在更新$scope变量时它会刷新。

+0

所以,我把你的编辑。角度接收的数据被刷新。问题是,它仍然不刷新页面。它必须刷新,以便应用程序按照轨道路由器并通过逻辑,根据获取请求:( – HoosierCoder

+0

rails逻辑需要做什么?也许当您接到呼叫时,您可以发布以执行任何服务器可能你遇到了我开始将ASP.NET MVC与AngularJS混合使用时碰到的同一个问题,这是一种新的思考方式 – Zach

+0

它从获取请求中接收参数,解析数据并绘制图表 – HoosierCoder

0

Angular在设计上应该不会刷新页面,因为它是为单页面应用程序构建的。如果你想手动刷新页面,使用

$scope.submitForm = function(){ 
    posts.factorySubmit().success(function(){ 
    $route.refresh(); 
    }); 
}; 

在你$get请求的成功作用。请记住将$route注入您的控制器。

+0

我试过这个,但由于某种原因,只要我注入$ route,就会中断应用程序。这个控制器代码看起来正确'。控制器( 'MainCtrl',[ \t '$范围', \t '$路线', \t '信息', \t函数($范围,$路线,柱){ \t $ scope.posts =职位。讯息; \t $ scope.submitForm =函数(){ \t \t posts.factorySubmit()成功(函数(){ \t \t $ route.refresh(); \t \t}); \t}; \t} ])' – HoosierCoder

+2

根据$ http文档,.success()现在不推荐使用 - 使用标准的.then()回调代替 https://docs.angularjs.org/api/ng/service/$ http –