从jsonp-ajax调用获取html响应



我很好奇为什么使用这个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响应,其中包含我在底部展示的有问题的代码。

最新更新