JeuWeb - Crée ton jeu par navigateur
Header Accept = undefined sur un fetch de collection Backbone. - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Header Accept = undefined sur un fetch de collection Backbone. (/showthread.php?tid=6710)



Header Accept = undefined sur un fetch de collection Backbone. - niahoo - 13-03-2013

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 ?


RE: Header Accept = undefined sur un fetch de collection Backbone. - Maks - 13-03-2013

Lâche tes bouts de code !

T'es sûr que ça vient pas de ton code serveur ?


RE: Header Accept = undefined sur un fetch de collection Backbone. - Sephi-Chan - 13-03-2013

Lach T kod


RE: Header Accept = undefined sur un fetch de collection Backbone. - niahoo - 13-03-2013

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


RE: Header Accept = undefined sur un fetch de collection Backbone. - niahoo - 13-03-2013

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.


RE: Header Accept = undefined sur un fetch de collection Backbone. - niahoo - 13-03-2013

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.


RE: Header Accept = undefined sur un fetch de collection Backbone. - Maks - 13-03-2013

Je comprends pas trop ce que tu as bricolé Big Grin mais si ça marche tant mieux


RE: Header Accept = undefined sur un fetch de collection Backbone. - niahoo - 13-03-2013

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


RE: Header Accept = undefined sur un fetch de collection Backbone. - Maks - 13-03-2013

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 ^^


RE: Header Accept = undefined sur un fetch de collection Backbone. - niahoo - 13-03-2013

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.