在这个Railscast#174分页教程中,作者改变了......
$(function() {
$(".pagination a").click(function() { // e.g. a.href = /transactions?page=x
$.get(this.href, null, null, "script");
return false;
});
});
当我的控制器收到此请求时,它返回JS文件(index.js.erb - 我自己根据教程添加了这个)。我理解"脚本"参与者有所作为,但我无法找出正在发生的事情。
控制器:
def index
# fetch arrays
@funds = current_user.funds
# set session vars
set_filter_date_session_variable(:transactions_filter_date_from) # to db format
set_filter_date_session_variable(:transactions_filter_date_to) # to db format
if @fund = current_fund
@transactions = @fund.transactions
.where("date >= ? AND date <= ? AND amount < 0", session[:transactions_filter_date_from], session[:transactions_filter_date_to])
.order("date DESC, id DESC")
## perform a paginated query:
@transactions = @transactions.paginate(:page => params[:page], :per_page => 5)
else
@transactions = []
end
@categories = current_user.categories.order(:name)
@transactions_filter_date_from = convert_date(session[:transactions_filter_date_from], "%Y-%m-%d", "%d/%m/%Y")
@transactions_filter_date_to = convert_date(session[:transactions_filter_date_to], "%Y-%m-%d", "%d/%m/%Y")
end
&#34;脚本&#34;参数get在请求标头中传递?以前我认为控制器查看了请求文件扩展名,可能默认为.html(所以如果我请求 file .json,它会从扩展名中知道它应该返回json视图)。有人可以澄清一点,或指导我某个地方,我可以理解控制器如何处理在这种情况下返回的视图。我想完全理解这一部分。
由于
答案 0 :(得分:0)
使用
$.get(this.href, null, null, "script");
您从服务中请求它返回javascript文件,因此"script"
为什么
通常情况下,您会注意到有时候人们在控制器中包含format.js
,这样当您输入网址+&#34;。&#34; +&#34;格式类型&#34; (例如。reports.csv
或reports.html
)您需要在控制器中包含以下代码(如果您的控制器未设置为带回该信息,则您无法请求json )
respond_to do |format|
format.html
format.js
end
如果您没有在控制器中包含该格式,则上面的get函数中的"script"
要求使用js文件进行响应。因此,为什么你的js代码被执行而不是你的html。如果您要求输入html,请查看会发生什么。
希望有道理吗?
我推断出这个结论是因为我使用jQuery的函数getScript
看起来像这样:
$.getScript(this.href);