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?
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 .
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.