今天遇到一个AJAX跨站请求api的问题,出现问题的本质是浏览器出于安全原因,限制了Ajax跨域请求。那如何处理这个问题?经过搜索之后,决定采用JSONP的方式。如果你还不太了解JSONP,请点击这里

JSONP在Rails中的具体使用:

1、 在子站的json请求中添加callback参数,并指定请求数据类型为jsonp。

  params = {dataType: 'jsonp'}
  url = "http://server2.com/api/search.json?callback=?"
  $.getJSON(url, params).success (response) =>
    #console.log response

2、修改主站后端代码,使其支持JSONP.

  format.json {
    items = [ {id: 1, name: 'hello' } ]
    if params[:callback]
      render :json => { items: items }, :callback => params[:callback]
    else
      render :json => { items: items }
    end
  }

至此,我们已经能够从主站拿到api数据了,从而解决了AJAX跨域的问题。

注意:JSONP只能用于get请求,我们不能为了方便,使用JSONP来处理本该post的数据操作,这将带来很大的安全隐患。