到目前为止,我已经能够让控制器渲染正确的部分,同时使用200个HTTP代码进行响应.我设置了一些回调来找出问题的根源:
jQuery(function($) { $("#follow-link").bind("ajax:before",function() { console.log("ajax:before"); }); $("#follow-link").bind("ajax:success",function(data,status,xhr) { console.log("ajax:success"); }); $("#follow-link").bind("ajax:complete",function() { console.log("ajax:complete"); }); $("#follow-link").bind("ajax:error",function(xhr,error) { console.log("ajax:error"); console.log(error); }); });
在触发之前和完成时,成功不成功,错误输出“parsererror”.当我检查Safari开发人员工具中的响应时,我得到的内容是一个简单的字符串.
解决方法
error(jqXHR,textStatus,
errorThrown)Function A function to be
called if the request fails. The
function receives three arguments: The
jqXHR (in jQuery 1.4.x,
XMLHttpRequest) object,a string
describing the type of error that
occurred and an optional exception
object,if one occurred. Possible
values for the second argument
(besides null) are “timeout”,“error”,
“abort”,and “parsererror”. When an
HTTP error occurs,errorThrown
receives the textual portion of the
HTTP status,such as “Not Found” or
“Internal Server Error.”
这意味着您的控制器可能会以预期数据以外的其他方式进行响应.在该控制器中,尝试:
Rails.logger.debug render_to_string(:partial => "followings/follow")
在任何情况下,检查您的日志,以确保您认为正在发生的事情正在发生.另外,写一个测试来验证这一点:
# controller spec... modify if using Test::Unit it "sends cool javascript" do xhr.post :unfollow,:id => 83,:data-method => "delete" response.body should == "some known response" end
好的,这是一个黑客,脆弱的规格,但它会做,直到你知道事情发生了什么.
一旦你得到这个工作,一切都会整齐地落到位.