类似于backbone fetch URL data formatting error,但在尝试回答时,网址看起来像http://localhost?site:[Object%20Object]
我的数据:
options.data = { name:companyName}
公司名称将包含"One, Two, Three"
之类的值。如果不执行encodeURIComponent
,查询将显示为http://localhost?name=One%2C+Two%2C+Three
。
我希望它看起来像http://localhost?name=One%2C%20Two%2C%20Three
(请注意网址中的%20
和+
的删除。
为了清楚我的代码看起来像这样:
sync: function(method, model, options) {
switch(method){
case "read": {
options.data = { name:options.data.name} //I only want to pass in a subset of properties for the query.
//options.data = {encodeURIComponent(options.data.name)} //this returns [Object%20Object]
}
break;
default:
break;
}
Backbone.sync.apply(this, arguments);
}
对于这两种情况,我都尝试processData:
false
或true
。
我目前通过以下方式解决这个问题:
sync:function(method, model, options){
switch(method){
case "read":
options.url = this.url+"?name="+options.data.name
break;
default:
break;
}
Backbone.sync.apply(this, arguments);
}
这让我获得了预期的结果我只是无法相信这是答案而且骨干只是无法处理获取请求中的连续特殊字符
答案 0 :(得分:0)
如下所示的简单提取会自动使用/test?name=One%2C%20Two%2C%20Three
。 1}}不需要。{/ p>
encodeURIComponent
collection.fetch({
data: {
name: "One, Two, Three"
}
});

var Collection = Backbone.Collection.extend({
url: "test"
});
var collection = new Collection();
collection.fetch({
data: {
name: "One, Two, Three"
}
});
// request to /test?name=One%2C%20Two%2C%20Three

如果不是字符串,则将其转换为查询字符串。它附加到GET请求的URL。请参阅
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>
选项以阻止此自动处理。对象必须是键/值对。
如果您无法将其作为processData
函数的选项传递,则应覆盖集合(或模型)的fetch
函数,而不是fetch
。
sync