Rails 用 ajax 调用 rails 的后台 处理成功了 js 回调却进入了 error (已解决 手误)

shooter · 2013年01月25日 · 最后由 shooter 回复于 2013年01月25日 · 6705 次阅读

前台

$.ajax({
    url:$(item).attr("url"),
    data: obj,
    type:'put',
    success:function(data){
      alert('succ');
    },
    error:function(data){
      alert('err');
    }
});

后台

if @model.update_attributes(params[:model])
  render :json => {:status => :success}
else
  render :json => {:status => :failure}
end

后端请求处理 ok 返回 http status 200 可是却跑到 js 的 error 里去了 百撕得不到其解啊

error 函数中有参数可以得到错误信息的,可以看下有没有线索。

error:function(XMLHttpRequest, textStatus, errorThrown) {
    // 通常 textStatus 和 errorThrown 之中
    // 只有一个会包含信息
}

#1 楼 @heliang7 嗯有内容 {"readyState":0,"responseText":"","status":0,"statusText":"error"}

可是 他不应该进入 error 中啊 在后端返回的状态码是 200

link, remote: true 试试看。我用这个 ok 的。

"readyState":0, "status":0 比较诡异啊

#4 楼 @chenge 注意到 LZ 用的 put

你要确认下,是不是到了后台的那个代码,做个输出操作。

好吧 我怀疑是后端的事情 我在另一个模块前端代码差不多 后台是这样的 update 用 save 保存的

if @topo.save
   render :json => "success".to_json
 else
   render :json => "failure".to_json
 end

这个是没有问题的 很诧异 save 跟 update_attributes 的区别

9楼 已删除
10楼 已删除
匿名 #11 · 2013年01月25日

render :json => {:status => :failure} => Completed 200 OK render :json => {:status => :failure}, :status => 500 => Completed 500 Internal Server Error http status 尽管 200 了,@model.update_attributes(params[:model])应该是失败了吧

好吧 不好意思了 有个地方写错了  切腹的心都有了

<a href="javascript:;" onclick=""></a> 写成了 <a href="javasctipt:;" onclick=""></a>

#13 楼 @chenge javascript spell error

这个一般浏览器会报错吧

#13 楼 @chenge javascript <=> javasctipt 手误 在 put 的时候 还有一个 get 请求 可能有冲突吧

#14 楼 @blacktulip
<a href="javasctipt:;" onclick=""></a> 这个定义在了 href 属性里面 chrome 没有报错

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册