2017-10-17 4 views
3

Nous avons besoin d'envoyer la demandeComment récupérer une collection backbone sans encoder les paramètres d'URL?

https://api.github.com/search/repositories?q=angular+user:angular&order=desc 

mais demande de la console est

https://api.github.com/search/repositories?q=angular%2Buser%3Aangular&order=desc 

La collection

var RepoCollection = Backbone.Collection.extend({ 
    url: 'https://api.github.com/search/repositories', 

    initialize: function() {}, 

    fetch: function(options) { 
     var params = { 
      q:"angular+user:angular", 
      order:"desc" 
     }; 
     return Backbone.Collection.prototype.fetch.call(this, { 
      data: $.param(params) 
     }); 
    } 
}); 

Par exemple:

Demande: https://api.github.com/search/repositories?q=com%2Buser%3Attomashuk&order=desc

{ 
    "total_count": 0, 
    "incomplete_results": false, 
    "items": [ 

    ] 
} 

Demande: https://api.github.com/search/repositories?q=com+user:ttomashuk&order=desc

{ 
     "total_count": 1, 
     "incomplete_results": false, 
     "items": [ 
     { 
      "id": 104921385, 
      "name": "CompanyOrganizer", 
      "full_name": "ttomashuk/CompanyOrganizer", 
      ......... 
      "score": 1.2680688 
     } 
     ] 
    } 
+1

Je ne suis pas sûr de savoir quelle est votre question. Mais les deux URL sont les mêmes. Dans le second cas, il utilise simplement le codage url standard. L'encodage d'URL pour '+' est '% 2B' et': 'est'% 3A'. – Poonacha

+0

Poonacha a raison, quelle est l'erreur ou le problème auquel vous êtes confronté? Il semble que vous ayez un problème lorsque vous pensez que l'encodage de l'URL est la source, mais ce n'est probablement pas le cas. –

+1

J'ai des résultats différents pour les deux demandes. Par exemple: https://api.github.com/search/repositories?q=com+user:ttomashuk&order=desc { "total_count": 1, "incomplete_results": false, "articles": [... ...]} et https://api.github.com/search/repositories?q=com%2Buser%3Attomashuk&order=desc { "total_count": 0, "résultats_complets": false, "articles": [ ] } –

Répondre

3

Les jQuery documentation on $.param montre exactement ce que vous cherchez:

var myObject = { 
 
    a: { 
 
    one: 1, 
 
    two: 2, 
 
    three: 3 
 
    }, 
 
    b: [1, 2, 3] 
 
}; 
 
var recursiveEncoded = $.param(myObject); 
 
var recursiveDecoded = decodeURIComponent($.param(myObject)); 
 

 
console.log("encoded:", recursiveEncoded); 
 
console.log("decoded:", recursiveDecoded);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

qui devrait sortie:

encoded: a%5Bone%5D=1&a%5Btwo%5D=2&a%5Bthree%5D=3&b%5B%5D=1&b%5B%5D=2&b%5B%5D=3 
decoded: a[one]=1&a[two]=2&a[three]=3&b[]=1&b[]=2&b[]=3 

Ainsi, vous pouvez chercher avec:

return Backbone.Collection.prototype.fetch.call(this, { 
    data: decodeURIComponent($.param(params)) 
}); 

Vous devez également passer toute autre les options passa d'abord chercher vers le bas à l'original chercher appeler ainsi votre primordial est transparent:

fetch: function(options) { 
    options = options || {}; 

    // extend the passed data with the default 
    options.data = decodeURIComponent($.param(_.extend({ 
     q: "angular+user:angular", 
     order: "desc" 
    }, options.data))); 

    return Backbone.Collection.prototype.fetch.call(this, options); 
}