[英]Rails - AJAX PUT or PATCH firing multiple times
我正在嘗試通過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
請求正確更新了值。 我想防止它被多次發射。 有沒有辦法做到這一點? (不改變路線或控制器方法)
首先要注意的是:POST請求中的截圖返回404,很可能是因為您沒有將控制器操作更新為create
而不是更新。 (確保您的路線也設置為匹配)。 由於沒有動作,Rails返回404,它將停止處理。
這很重要,因為您的PATCH屏幕截圖看起來可能無限重定向到自身。 每個PATCH請求都會得到一個HTTP 302重定向作為響應,因為你得到了很多,我的猜測是它重定向到自己(相同的URL,或重定向到相同控制器方法的URL ...或其他一些導致任何URL重定向的中間件)。
因此,如果您更改了控制器操作和路由以允許POST,我打賭您將獲得與PATCH相同的多個請求和重定向。
這解決了一個謎。 接下來是問你為什么要獲得無限重定向。 我無法從可用信息中回答這個問題,但這可能會讓您開始使用解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.