Rails - AJAX PUT或PATCH多次触发

Asw*_*nan 5 javascript ajax jquery ruby-on-rails angularjs

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

我正在使用Angular JS和jQuery.

HTML模板

这是我的HTML模板的样子 -

<span id="test" ng-click="setValue('test')"></span>
Run Code Online (Sandbox Code Playgroud)

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);
    });
};
Run Code Online (Sandbox Code Playgroud)

Rails代码

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

def update
   @resource.update(resource_params)
   respond_with(@resource)
end
Run Code Online (Sandbox Code Playgroud)

截图

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

在此输入图像描述

通过简单地将PATCH(或PUT)请求更改为POST,调用仅被触发一次.见下面的截图 -

在此输入图像描述

是否有任何理由为什么PUT请求被多次触发,而POST请求只被触发一次?

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

Cra*_*ker 0

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

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

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

这就解开了一个谜团。接下来是问为什么你会得到无限重定向。我无法从现有信息中回答这个问题,但这可能会帮助您开始寻找解决方案。