【问题标题】:jQuery how to put hash value in GET request parameterjQuery如何将哈希值放入GET请求参数中
【发布时间】:2018-06-05 06:46:38
【问题描述】:

我是这样发送get请求的,目的是下载一个excel文件。

var filter = {
  'type': 'credit',
  'status': 'fail',
  'invoice_type': 'invoce',
}
var url = `/download_money_report?filter=${filter}`
window.location.assign(url);

但是在后端(Rails),我得到这样的参数 { "filter" => "[object Object]" }

我该怎么做才能让它变成

{ 
  "filter" => {
    "type" => 'credit',
    "status" => 'fail',
    "invoice_type" => 'invoce',
  }
}

【问题讨论】:

  • 您需要在 JS 中将对象编码为 JSON,将其发送到单个参数中,然后在 Ruby 逻辑中反序列化 JSON - 或者在查询字符串中单独发送每个参数,然后从这些参数中创建对象Ruby 代码中的 URL 参数。
  • 您可以在将过滤器添加到 URL 之前对其进行字符串化。如所写,您只需触发具有显示结果的对象的 toString() 函数: var url = /download_money_report?filter=${JSON.stringify(filter)}

标签: javascript jquery ruby-on-rails get


【解决方案1】:

您必须使用JSON.Stringify(filter) 才能将其附加到 URL 并在 Rails 中解析

【讨论】:

    【解决方案2】:

    您需要将一个对象转换为 url,这是一个示例:

    var filter = {
         'type': 'credit',
         'status': 'fail',
         'invoice_type': 'invoce',
    };
    
    
    var str = Object.keys(filter).map(function(key){ 
      return encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]); 
    }).join('&');
    
    console.log(str); //"type=credit&status=fail&invoice_type=invoce"
    var url = `/download_money_report?${str}`
    => "/download_money_report?type=credit&status=fail&invoice_type=invoce"
    

    在 Rails 中是:

    params[:type] => credit
    params[:status] => fail
    params[:invoce_type] => invoce
    

    【讨论】:

    • @CodaChang 当然,因为你使用 GET 和 body,那是 over-killed
    猜你喜欢
    • 2011-12-05
    • 2014-03-26
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多