Bébés loutres, mignons non ?

Je déteste le Javascript. Je le hais, je l’abhorre et le vomis par tous les pores de ma peau, et Dieu sait que le pore salut.

Je suis persuadé que lorsqu’un développeur se dit “tiens, et si je me mettais au Javascript, ça a l’air trop cool”, un chaton meurt dans d’atroces souffrances, et qu’à chaque fois que quelqu’un a l’idée de faire du Javascript côté serveur, une fratrie de bébés loutres au grand complet se fait sodomiser à sec par un banc de narvals.

C’est tellement mignon, un bébé loutre, comment peut-on leur souhaiter une fin aussi atroce ? Chaque fois qu’il vous vient l’idée d’installer Node.js parce que “ça a l’air cool et qu’on peut l’utiliser avec MongoDB, arrachez-vous un bras avec les dents, la Société Protectrice de l’Anus des Bébés Loutres vous en sera infiniment reconnaissante.

Ce week-end, j’ai été pris d’une envie subite (de narval, n’ayons pas peur d’enfiler la métaphore jusqu’au bout) de me flageller avec des barbelés rouillés avant de me plonger dans un bon bain d’acide sulfurique. Alors j’ai fait du Javascript ; mais pas n’importe quel Javascript hein : du Javascript avec Jquery, histoire de rajouter une couche de Javascript dans mon Javascript (ça, c’est pour ceux qui ont besoin de regarder Pimp My Ride pour comprendre la récursivité).

Alors, dans la souffrance, je me lance. Je vais sur le site de Jquery, je copie / colle la doc bêtement, ma requête AJAX démarre plus vite qu’un adolescent devant les aventures de Katsuni au pays du Zizipanpan, et là… plus rien, la panne.

Le code est bien renvoyé à mon navigateur. Les en-têtes HTTP sont bons. Aucune erreur ne remonte dans Firebug. Mais mon navigateur n’exécute pas le Javascript renvoyé.

Alors je simplifie. Je remplace les actions à effectuer par un bête alert("toto");, et au cas-où mon Firefox refuserait de lancer les alertes, je finis avec un simple console.log("fuck the fucking fuckers);.

Rien. Que dalle. Ma console reste aussi vide que le programme télé un soir de réveillon.

Je ne comprends pas.

J’avais pourtant bien copié / collé la documentation, remplacé les valeurs fournies par les miennes, lu tous les didacticiels sur Rails, le Javascript qui ne fait pas d’obstruction, les licornes et les double arc-en-ciels. Mais rien.

Je réduits mon code à sa plus simple expression, mais ça ne marche pas plus que les plans de la gauche pour réduire le chômage.

Je réduis mon controller à sa plus simple expression :

respond_to do |format|
  format.js {
    render 'autosave'
  }
end

Pareil pour ma vue en js.erb :

<%= javascript_tag "alert('toto');" %>

Le code renvoyé au navigateur est bon, c’est Firebug qui le dit, et aucune erreur ne remonte dans la console.

<script type="text/javascript">
//<![CDATA[
alert('toto');
//]]>
</script>

Mes en-têtes HTTP sont aussi frais qu’un poisson du jour.

# HTTP headers
Cache-Control   max-age=0, private, must-revalidate
Connection  close
Content-Type    text/javascript; charset=utf-8
Etag    "3040436e8c478e9f41e71e821327d8ed"
Server  thin 1.6.1 codename Death Proof
Set-Cookie  _publify_blog_session=blablablablabla; path=/; HttpOnly
X-Request-Id    c85b8a7b08158c82d74f766ad105cec0
X-Runtime   0.047283
x-ua-compatible IE=Edge,chrome=1

Mon appel AJAX transpire la propreté par tous les pores (d’Amsterdam bien évidemment)

function autosave_request(e) {
  $('#article_form').keyup(function() {
  typewatch(function() {
    submit_article_form();
    $.ajax({
    type: "POST",
    url: '/admin/content/autosave',
    data: $("#article_form").serialize(),
    dataType: "JSON"});
  }, 1000)
  });
}

Je finis par activer le mode super mega hyper debug de Firebug, le truc tellement verbeux que même ta belle-mère ne fait pas le poids et tellement compliqués qu’il faut un doctorat en physique quantique pour le comprendre (et parce que Javascript, un coup ça marche, un coup ça marche pas, en fonction de qui regarde l’application, le développeur ou le client) : afficher les erreurs Chrome et afficher les messages issues de Chrome.

Et là… “ouin, mais bouh, t’es méchant, tu nous as promis de nous envoyer du JSON et tu nous balances du bête Javascript alors nous on boude, voilà, et en plus on te dit pas pourquoi”.

Deux minutes plus tard, le temps d’immoler une jeune vierge devant la centrale de Poissy (c’est la faute aux jeux vidéos), de le publier sur Instagram (c’est la faute au maton), je peux pusher mon fixe et créer une PR.

La morale de cette histoire, c’est que même un RTFM peut te faire perdre trois jours s’il n’est pas fait correctement. La morale de cette morale, c’est que Javascript c’est vraiment de la daubasse.

Perry the Platypus wants you to subscribe now! Even if you don't visit my site on a regular basis, you can get the latest posts delivered to you for free via Email: