【问题标题】:Rails - AJAX PUT or PATCH firing multiple timesRails - AJAX PUT 或 PATCH 多次触发
【发布时间】:2016-05-09 11:12:05
【问题描述】:

我正在尝试通过 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 次)。请看下面的截图 -

只需将PATCH(或PUT)请求更改为POST,调用只会被触发一次。请看下面的截图 -

PUT 请求被多次触发,而 POST 请求只被触发一次,有什么原因吗?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    因此,如果您更改控制器操作和路由以允许 POST,我敢打赌您将获得与使用 PATCH 获得的相同的多个请求和重定向。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      相关资源
      最近更新 更多