主干获取网址未按预期格式化

时间:2017-02-15 23:06:42

标签: javascript backbone.js url-encoding

类似于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: falsetrue

更新

我目前通过以下方式解决这个问题:

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);  
}  

这让我获得了预期的结果我只是无法相信这是答案而且骨干只是无法处理获取请求中的连续特殊字符

1 个答案:

答案 0 :(得分:0)

如下所示的简单提取会自动使用/test?name=One%2C%20Two%2C%20Three

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




来自jQuery ajax documentation

  

如果不是字符串,则将其转换为查询字符串。它附加到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