所以我有一个场景,我的jQuery ajax请求命中服务器,但页面不会更新。我很难过......
这是ajax请求:
$.ajax({
type: 'GET',
url: '/jsrender',
data: "id=" + $.fragment().nav.replace("_link", "")
});
观察rails日志,我得到以下内容:
Processing ProductsController#jsrender (for 127.0.0.1 at 2010-03-17 23:07:35) [GET]
Parameters: {"action"=>"jsrender", "id"=>"products", "controller"=>"products"}
...
Rendering products/jsrender.rjs
Completed in 651ms (View: 608, DB: 17) | 200 OK [http://localhost/jsrender?id=products]
所以,我觉得ajax请求到达服务器似乎很明显。正在执行jsrender方法中的代码,但jsrender.rjs中的代码不会触发。这是方法,jsrender:
def jsrender
@currentview = "shared/#{params[:id]}"
respond_to do |format|
format.js {render :template => 'products/jsrender.rjs'}
end
end
为了论证,jsrender.rjs中的代码是:
page<<"alert('this works!');"
这是为什么?我在params中看到没有authenticity_token,但我尝试传递一个authenticity_token也有相同的结果。
提前致谢。
答案 0 :(得分:2)
从我在这里看到的,您的请求正在服务器上处理,并且正在返回响应,但是如果您希望它被处理/评估,您必须在$ .ajax调用中添加回调函数,您告诉它如何处理响应。
$.ajax({
type: 'GET',
url: '/jsrender',
data: "id=" + $.fragment().nav.replace("_link", ""),
success: function(response) {
eval(response);
}
});
您可以找到jQuery的$ .ajax调用here的所有可用参数。
我还建议使用Firebug(或等效的,如果您不使用Firefox)来调试您的ajax请求。
它有一个控制台选项卡,您可以在其中查看所做的每个XHR请求,请求/响应标头,发布的数据和响应状态代码。
此外,无需发送authenticity_token
,因为您正在执行GET
,并且仅在非GET请求时才需要令牌。