jquery 不会为 Rails 标准 REST DELETE 答案调用 $.ajax 上的成功方法

作者:编程家 分类: js 时间:2025-08-10

使用jQuery调用Rails标准REST DELETE方法后,无法通过$.ajax的success方法获取响应结果。在这篇文章中,我们将探讨这个问题,并提供解决方案。

在Rails开发中,使用RESTful架构是一种常见的做法。它使用HTTP动词来操作资源,其中包括GET、POST、PUT和DELETE等方法。当我们使用jQuery的$.ajax方法调用Rails的DELETE方法时,我们希望能够在请求成功后执行一些操作,比如更新页面内容或显示成功提示。然而,由于DELETE方法的特殊性,jQuery的success方法并不能直接获取到响应结果。

为了更好地理解这个问题,让我们先看一个简单的案例代码。假设我们有一个名为"delete"的按钮,点击该按钮将发送一个DELETE请求到Rails服务器上的"/users/1"路径,用于删除用户的信息。

html

javascript

$(function() {

$('#delete-button').click(function() {

$.ajax({

url: '/users/1',

type: 'DELETE',

success: function(response) {

console.log(response);

alert('删除成功!');

},

error: function(xhr, status, error) {

console.log(error);

alert('删除失败!');

}

});

});

});

在上述代码中,我们为delete按钮绑定了一个click事件,当按钮被点击时,会发送一个DELETE请求到服务器上的"/users/1"路径。在success回调函数中,我们期望能够获取到服务器返回的响应结果,并在控制台中打印出来,同时显示一个成功的提示框。在error回调函数中,我们处理请求失败的情况。

然而,当我们运行这段代码时,会发现控制台并没有打印出任何结果,同时也没有弹出成功的提示框。这是因为DELETE请求默认情况下,并不返回响应体,而是返回一个204 No Content的状态码。

为了解决这个问题,我们可以通过定制Rails的DELETE响应,让其返回一个自定义的响应体。在Rails的控制器中,我们可以使用render方法来指定响应体的内容。

ruby

def destroy

# 删除用户的逻辑处理

if @user.destroy

render json: { message: '删除成功!' }, status: 200

else

render json: { message: '删除失败!' }, status: 422

end

end

在上述代码中,我们在删除用户的逻辑处理后,根据不同的结果分别返回成功或失败的消息。并且通过指定status参数,将状态码设置为200或422。这样,我们就可以在前端通过success方法获取到响应结果了。

修改后的前端代码如下:

javascript

$(function() {

$('#delete-button').click(function() {

$.ajax({

url: '/users/1',

type: 'DELETE',

success: function(response) {

console.log(response.message);

alert(response.message);

},

error: function(xhr, status, error) {

console.log(error);

alert('删除失败!');

}

});

});

});

现在,当我们点击"删除用户"按钮时,控制台将打印出"删除成功!"的消息,并弹出一个成功的提示框。

解决方案

为了解决无法在DELETE请求中使用$.ajax的success方法的问题,我们可以通过定制Rails的DELETE响应,返回一个自定义的响应体。这样,我们就能够在前端获取到响应结果,并进行相应的处理。在上述案例代码中,我们演示了如何在Rails的控制器中进行响应定制,并在前端使用$.ajax的success方法获取到响应结果。

通过以上的解决方案,我们可以充分利用jQuery和Rails的强大功能,实现更灵活和交互性的Web开发体验。希望本文对你理解如何处理jQuery调用Rails标准REST DELETE方法中的成功回调有所帮助。