Rails - AJAX PUT或PATCH多次触发

时间:2016-02-01 04:44:34

标签: javascript jquery ruby-on-rails angularjs ajax

我正在尝试通过AJAX更新资源的属性(使用PUTPATCH请求)并且请求被多次触发。

我正在使用Angular JS和jQuery。

HTML模板

以下是我的HTML模板的样子 -

<span id="test" ng-click="setValue('test')"></span>

Javascript代码

以下是我的Angular JS代码的样子 -

$scope.setValue = function(value){
    $.ajax({
       method: 'PATCH' // or PUT,
       url: 'resources/' + $scope.resourceId,
       data: {
          test: value
       }
    }).success(function(response){
        console.log(response);
    });
};

Rails代码

以下是我的控制器更新方法的样子 -

def update
   @resource.update(resource_params)
   respond_with(@resource)
end

截图

AJAX请求被多次触发(接近15次)。见下面的截图 -

enter image description here

只需将PATCH(或PUT)请求更改为POST,呼叫就只会触发一次。见下面的截图 -

enter image description here

PUT请求被多次触发是否有任何原因,而POST请求只被触发一次?

即使PUT请求正确更新了值。我想防止它被多次发射。有没有办法做到这一点? (不改变路线或控制器方法)

1 个答案:

答案 0 :(得分:0)

首先要注意的是:POST请求中的截图返回404,很可能是因为您没有将控制器操作更新为create而不是更新。 (确保您的路线也设置为匹配)。由于没有动作,Rails返回404,它将停止处理。

这很重要,因为您的PATCH屏幕截图看起来可能无限重定向到自身。每个PATCH请求都会得到一个HTTP 302重定向作为响应,因为你得到了很多,我的猜测是它重定向到它自己(相同的URL,或重定向到同一控制器方法的URL ...或其他一些导致任何URL重定向的中间件。)

所以,如果你改变你的控制器动作和路线以允许POST,我打赌你会得到相同的多个请求&amp;使用PATCH重定向。

这解决了一个谜。接下来是问你为什么要获得无限重定向。我无法从可用的信息中回答这个问题,但这可能会让您开始使用解决方案。