【发布时间】:2013-01-15 20:39:56
【问题描述】:
我的应用程序中有一个端点,它根据给定的查询字符串返回数据。查询字符串可以(并且经常必须)包含重复的键,例如/api/entities/related?filter1=val1&filter1=val2&filter2=val3 来识别filter1 类型的两个过滤器。 Flask 很好地处理了这个问题,例如在执行request.args.to_dict 时,我会得到{'filter1': ['val1', 'val2'], 'filter2': 'val3'}。
我的问题是如何在从端点获取集合时使用 Backbone 实现相同的功能。目前我可能有
this.fetch({data: {'filter1': 'val1', 'filter1': 'val2', 'filter2': 'val3'}});
由于重复键会在 javascript 对象中相互覆盖,我的 filter1 值最终将是 val2。但是,当做
this.fetch({data: {'filter1': ['val1', 'val2'], 'filter2': 'val3'}});
url 最终是/api/entities/related?filter1%5B%5D=val1&filter1%5B%5D=val2,它至少使用了两个相同的键,但显然不起作用。
这是一个编码问题还是我应该以不同的方式处理它?
【问题讨论】:
-
您应该使用json有效负载与您的端点通信,即在必要时使用带有json主体的POST请求,而不是处理查询字符串中混乱的url编码,越简单越好。跨度>
-
我相信这是在 url 中编码数组的标准方法,它会解码回:
decodeURIComponent($.param({filter1: ['val1', 'val2']})); // outputs: "filter1[]=val1&filter1[]=val2"。我找不到太多关于此的文档,但这个 SO 响应同意(另外,我相信 jQuery 的 $.param()):stackoverflow.com/questions/40568/square-brackets-in-urls/…
标签: url backbone.js encoding query-string flask