我正在尝试通过AJAX更新资源的属性(使用PUT
或PATCH
请求)并且请求被多次触发。
我正在使用Angular JS和jQuery。
以下是我的HTML模板的样子 -
<span id="test" ng-click="setValue('test')"></span>
以下是我的Angular JS代码的样子 -
$scope.setValue = function(value){
$.ajax({
method: 'PATCH' // or PUT,
url: 'resources/' + $scope.resourceId,
data: {
test: value
}
}).success(function(response){
console.log(response);
});
};
以下是我的控制器更新方法的样子 -
def update
@resource.update(resource_params)
respond_with(@resource)
end
AJAX请求被多次触发(接近15次)。见下面的截图 -
只需将PATCH
(或PUT
)请求更改为POST
,呼叫就只会触发一次。见下面的截图 -
PUT
请求被多次触发是否有任何原因,而POST
请求只被触发一次?
即使PUT
请求正确更新了值。我想防止它被多次发射。有没有办法做到这一点? (不改变路线或控制器方法)
答案 0 :(得分:0)
首先要注意的是:POST请求中的截图返回404,很可能是因为您没有将控制器操作更新为create
而不是更新。 (确保您的路线也设置为匹配)。由于没有动作,Rails返回404,它将停止处理。
这很重要,因为您的PATCH屏幕截图看起来可能无限重定向到自身。每个PATCH请求都会得到一个HTTP 302重定向作为响应,因为你得到了很多,我的猜测是它重定向到它自己(相同的URL,或重定向到同一控制器方法的URL ...或其他一些导致任何URL重定向的中间件。)
所以,如果你改变你的控制器动作和路线以允许POST,我打赌你会得到相同的多个请求&amp;使用PATCH重定向。
这解决了一个谜。接下来是问你为什么要获得无限重定向。我无法从可用的信息中回答这个问题,但这可能会让您开始使用解决方案。