JeuWeb - Crée ton jeu par navigateur

Version complète : Header Accept = undefined sur un fetch de collection Backbone.
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Voilà, tout est dans le titre. Quand j'appelle .fetch() sur ma collection je me mange une bad request (400)

J'ai regardé les headers de la requête et le Accept vaut undefined ...

Je trouve pas grand chose sur google à part mettre le header manuellement, mais ce n'est pas nécessaire normalement.

Une idée ?
Lâche tes bouts de code !

T'es sûr que ça vient pas de ton code serveur ?
Lach T kod
Ben si je vais récupérer l'URL dans un onglet j'ai bien mon bout de JSON qui apparaît, le content-type est correct.

Je vous montre le code, mais le problème c'est qu'il y a pas vraiment de code ... y a 3 lignes :


(function (GC) {

// Cette collection gère les ships de la map

GC.models = GC.models || {};

GC.models.MapCrowd = Backbone.Collection.extend({
model: GC.models.MapShip

, fetch_ships: function(zone_id){
this.url = '/crowd/' + zone_id;
this.fetch(
/*{
success: function () { alert('crowd fetch OK');},
error: function () { alert('crowd fetch error');}
}*/
);
}

// Pas besoin de comparaison entre les ships pour le moment
, comparator: false //
});

}(GC));

(function (GC,win) {

// On instancie la crowd et on lui dit de récupérer les ships de
// la zone de départ
var crowd = new GC.models.MapCrowd;
console.log('crowd',crowd);
crowd.fetch_ships(GC.config.init_zid);

}(GC,window));



J'ai testé jQuery 1.9.1 et 1.7.1, aucune différence ...

Je vais virer lodash et mettre underscorejs à la place pour voir si ça vient de là.

lodash/underscore même combat; erreur 400

Hmmm ça doit venir du serveur, j'vois pas d'autre solution
Bon ben j'ai mis les headers manuellement ... Il me semblait que Backbone ne géreait que du JSON et que par conséquent il mettait ce header tout seul comme un grand .. Tant pis, ça fonctionne.
Bon apparemment sur les navigateurs qui implémentent l'objet JSON en natif, ce dernier n'aime pas qu'on touche au prototype de Object Smile

Du coup tout est revenu normalement.
Je comprends pas trop ce que tu as bricolé Big Grin mais si ça marche tant mieux
Je voulais modifier le prototype de Object pour pouvoir récupérer depuis un objet une fonction dont le this reste accroché à l'objet.


var a = {
do_something = function() {
this.do_another_thing();
}
};

var b = {
// [...]
};

b.do_something = a.superior('do_something');

avec le code précédent, appeler b.do_something() appelle en fait a.do_something() -- enfin, disons que this reste a . C'est utile pour garder a en variable privée et exposer b comme API. Du coup, j'utilise underscore (lo-Dash en fait) pour binder tout ça et ça ira bien Smile
backbone bind automatiquement les events aux collections, models ect (génial pour un développeur JS, un peu moins avec CS car moins souple)
après tu parles peut être d'un code qui n'a rien à voir avec ton app backbone ^^
Oui oui c'est du code de base, mais je l'ai viré, tant que j'en ai pas besoin, et _.bind fera l'affaire.