我很好奇为什么要用这个ajax调用:
$.ajax({
dataType: 'jsonp',
type: 'GET',
url: 'http://localhost:3000/gwsearch/ajax_search?d1=36354&d2=36355',
crossDomain: true
}).done(function(data){
alert(data);
});
对此rails方法:
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响应?
答案 0 :(得分:0)
答案 1 :(得分:0)
想出来,对于那些想知道,你的respond_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响应,其中包含我在底部展示的有问题的代码。