首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jquery没有为rails标准REST DELETE应答调用$.ajax上的成功方法

jquery没有为rails标准REST DELETE应答调用$.ajax上的成功方法
EN

Stack Overflow用户
提问于 2011-01-25 16:55:36
回答 2查看 20.1K关注 0票数 58

也许这样的问题并不新鲜,但我没有找到任何类似的东西。我有这样的jQuery代码:

代码语言:javascript
复制
$.ajax({ 
  url : ('/people/'+id), 
  type : 'DELETE', 
  dataType : 'json', 
  success : function(e) {
    table.getItems(currentPage);
  }
});

我的Rails控制器看起来像这样:

代码语言:javascript
复制
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回调不会被调用:

代码语言:javascript
复制
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说,该查询被触发并在两种情况下都返回200OK,项目在这两种情况下也被删除。但在第二种情况下,回调不会被调用。

REST有显著的区别吗?有没有办法通过使用脚手架控制器来利用jQuery?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-13 09:44:50

我已经遇到过这个问题几次了,答案看起来很简单。

您在$.ajax调用中使用了dataType : 'json',因此jQuery期望得到JSON响应。With JSON Rails返回一个包含单个空格(http://github.com/rails/rails/issues/1742)的响应,这不被jQuery接受为有效的head :ok

因此,如果你真的希望得到一个错误或者一个空的200OK头,只要在你的请求中设置dataType : 'html',它就会工作(如果你没有设置dataType,jQuery将尝试根据响应头等猜测类型,并仍然可以猜测json,在这种情况下,你仍然会有这个问题)。如果您真的希望得到JSON,那么不要使用head :ok来呈现一些有效的JSON (参见注释),或者像@Waseem建议的那样使用head :no_content

票数 74
EN

Stack Overflow用户

发布于 2011-03-16 22:00:23

这有时是由旧版本的jQuery验证插件引起的。如果你正在使用这个插件,这有时会导致这个问题。有一个更新可以修复这个问题,如果它适用于您的案例。

或者,您可以通过以下方式设置错误处理程序来找出问题所在:

$.ajaxSetup()$.ajaxError()

这可能会返回一个解析错误。新版本的jQuery因对JSON解析非常严格而臭名昭著。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4791499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档