web-dev-qa-db-fra.com

À quoi sert la fonction j dans Rails?

Je viens de tomber sur un blog qui mentionne une fonction j dans Rails. Ils l'utilisaient pour faire des mises à jour de page de style ajax.

$('#cart').html("<%=j render @cart %>");

Je comprends qu'ils utilisent des partiels pour rendre le cart partiel, mais quel est l'intérêt de j? J'ai trouvé des articles qui disent qu'il convertit la chaîne en quelque chose que JavaScript acceptera, mais qu'est-ce que cela signifie?

51
Tyler DeWitt

escape_javascript(javascript)

Échappe les retours chariot et les guillemets simples et doubles pour les segments JavaScript.

Également disponible via l'alias j ().

À partir des les Rails docs .

61
Peter Sobot

Peter a en fait affiché la bonne réponse. Mais je vais essayer d'élaborer:

Je suppose que vous connaissez le concept de base de l'ajax? Disons que vous voulez pouvoir créer des commentaires de manière ajaxy. Dans Rails vous pouvez répondre à [~ # ~] poster [~ # ~] demandes dans vos CommentsController via:

def create
  @comment = Comment.new(params[:comment])
  respond_to do |format|
    render.js
  end
end

Cela signifie que si une requête ajax du client (via jquery/javascript) est soumise au CommentsController il reconnaîtra le format (.js) et répondez par _ create.js.erb partial. Le partiel rendrait alors le nouveau commentaire avec quelque chose comme ceci:

$('.comments').append("<%=j render @comment %>");

Maintenant, pour accéder à la méthode j ou escape_javascript: Certains mauvais utilisateurs peuvent soumettre un commentaire contenant (malveillant) javascript qui serait exécuté sur votre page sauf vous utilisez la méthode j qui

Échappe les retours chariot et les guillemets simples et doubles pour les segments JavaScript.

et empêche donc l'exécution du code dans le navigateur.

73
wpp