gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:25:46 25 4
gpt4 key购买 nike

可能这样的问题并不新鲜,但我没有发现任何类似的问题。我有这样的 jQuery 代码:

$.ajax({ 
url : ('/people/'+id),
type : 'DELETE',
dataType : 'json',
success : function(e) {
table.getItems(currentPage);
}
});

我的 Rails Controller 如下所示:

def destroy
@person = Person.find(params[:id])
@person.destroy

respond_to do |format|
format.html { redirect_to(people_url) }
format.json { render :json => @person, :status => :ok }
end
end

这正在工作。

但是当我使用以下内容(按标准生成)时,不会调用 success 回调:

def destroy
@person = Person.find(params[:id])
@person.destroy

respond_to do |format|
format.html { redirect_to(people_url) }
format.json { head :ok }
end
end

rails 3.0.3jQuery 1.4.2Firefox 3.6.13 下测试。
Firebug 说,在这两种情况下,该查询都会被触发并返回 200 OK,项目在这两种情况下也会被删除。但在第二种情况下,不会调用回调。

REST 有显着差异吗?有没有办法通过使用脚手架 Controller 来利用 jQuery?

最佳答案

我已经遇到过几次这个问题,答案看似简单。

您在 $.ajax 调用中使用 dataType : 'json',因此 jQuery 需要 JSON 响应。使用 head :ok Rails 返回包含单个空格 ( http://github.com/rails/rails/issues/1742 ) 的响应,jQuery 不接受该响应作为有效的 JSON。

因此,如果您确实希望收到错误或裸露的 200 OK header ,只需在请求中设置 dataType : 'html' ,它应该可以工作(如果您不设置 dataType, jQuery 会尝试根据响应头等猜测类型是什么,并且仍然可以猜测 json,在这种情况下你仍然会遇到这个问题)。如果您确实希望返回 JSON,请不要使用 head :ok 渲染 JSON 有效的内容(请参阅注释),或者按照@Waseem<的建议使用 head :no_content/p>

关于jquery 不会为 Rails 标准 REST DELETE 答案调用 $.ajax 上的成功方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4791499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com