我很好奇为什么使用这个ajax调用:
$.ajax({
dataType: 'jsonp',
type: 'GET',
url: 'http://localhost:3000/gwsearch/ajax_search?d1=36354&d2=36355',
crossDomain: true
}).done(function(data){
alert(data);
});
对此轨道方法:
def ajax_search
#random code
respond_to do |format|
format.html
format.js { render :json => @gw_search_results.to_json, :callback => params['callback'] }
end
我收到一个html响应。如果我删除"format.html",我会得到一个带有正确数据的jsonp响应,但我只是想知道为什么rails选择默认发送回html,而不是jsonp?我错过了什么?我想通过js调用,它会在可用的情况下返回js响应?
http://davidwparker.com/2010/03/09/api-in-rails-respond-to-and-respond-with/
需要有一个明确的回应和回应的声明。
对于那些想知道的人来说,responsd_to语句的顺序确实很重要。我认为他们没有。这给了我一个json响应:
respond_to do |format|
if params[:callback]
format.js { render :json => {:items_by_tag => @gw_search_results.to_json}, :callback => params[:callback] }
else
format.json { render json: {:items_by_tag => @gw_search_results}}
end
format.html
end
它似乎击中了jsonp回调条件,并向我吐出了我需要的东西,和以前一样,我有
respond_to do |format|
format.html
if params[:callback]
format.js { render :json => {:items_by_tag => @gw_search_results.to_json}, :callback => params[:callback] }
else
format.json { render json: {:items_by_tag => @gw_search_results}}
end
end
我猜它认为format.html是一个有效的响应,并产生了该响应而不是json。请注意,即使我将ajax调用上的请求标头更改为"application/json",我仍然会收到html响应,其中包含我在底部展示的有问题的代码。