欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一个ajax和rails交互的例子

程序员文章站 2022-05-19 23:24:18
...
首先,这里用了一个,query信息解析的包,如下
https://github.com/rapportive-oss/jquery-parsequery
主要做如下:
$.parseQuery({query: "id[]=1&id[]=2",
    array_keys: /^ids$/,
    decode: function (input, context) {
        input = this.default_decode(input);
        if (context === null) {
            return input.replace(/\[\]$/, 's')
        } else if (context === "ids") {
            input = parseInt(input);
            if (isNaN(input)) {
                throw URIError("id was not a number");
            }
        }
        return input;
    }
}) == {'ids':[1, 2]}


例子,正式触发

// If direct link to property query is used send to Rails
try {
  var hash = location.hash.substr(1, location.hash.length);
  if (location.pathname == '/properties' && hash.length > 0) {
    $.parseQuery.separator = ',';
    var data = $.parseQuery(hash);
    $.ajax({
      url      : '/properties',
      type     : 'GET',
      data     : data,
      dataType : 'script'
    });
  }
} catch(err) { }

服务器端

# app/controllers/application_controller.rb
helper_method :params_to_url

def params_to_url
  rails_params = [
    'action', 
    'controller', 
    'commit', '_', 
    'authenticity_token', 
    '_method', 
    'format', 
    'utf8']
  params_copy = params.dup
  params_copy.map { 
   |k,v| "#{k}=#{URI.escape(v.to_s)}" if !v.empty? && !rails_params.include?(k)  
  }.compact.join(',')
end






# app/views/properties/index.js.erb
<%- if @properties.size > 0 -%>
# For example, update DIV with found properties
window.location.hash = '<%= params_to_url %>';
<%- end -%>