从jsonp ajax调用获取html响应

时间:2013-11-21 19:11:44

标签: ruby-on-rails ajax jsonp

我很好奇为什么要用这个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响应?

2 个答案:

答案 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响应,其中包含我在底部展示的有问题的代码。