Why I need add "data: {type: "script"}" on remote link with rails / ajax
Asked Answered
B

3

5

in one project of mine, the code:

  = link_to "add", new_me_category_path, class: "btn btn-success", remote: true

can load remote form correctly.

But some one can not work, browser did not execute the responese js code. I need to add "data: {type: "script"}" like this :

  = link_to "add", new_me_category_path, class: "btn btn-success", remote: true, data: {type: "script"}

I want to know the reason.

Botticelli answered 23/2, 2013 at 14:19 Comment(1)
Can you add a little more code?Distributive
D
4

Im not JS expert, and I dont know Ruby, but i think:

When datatype is set to script - downloaded code is loaded and executed immediately.

When datatype is default (html) - downloaded code is just loaded into browser. You have to execute it "manually" (by calling some function for example).

If your code has just some functions for use with previously loaded code - these functions will be available and will work (when data type is html).

If there are defined events in your code - they will not work because they are not initialized, becuase code was not executed.

If my explanation is bad - you may read about difference between jQuery.get() and jQuery.getScript() methods.

Distributive answered 27/2, 2013 at 15:12 Comment(0)
Y
2

Behind the scenes, jQuery's ajax method is used: http://api.jquery.com/jquery.ajax/ by uJS https://github.com/rails/jquery-ujs whenever the data-remote="true" attribute of the link is set, which is done by remote: true.

As stated in the documentation, Ajax determines the HTTP Accepts header sent and interprets the return value based on the dataType and accepts arguments passed to ajax(), which here are taken from the data- attributes of the anchor by uJS.

If no dataType is set through the data-type attribute, jQuery inferences the request and response type "intelligently". This can explain inconsistencies if you do not explicitly specify it.

Yost answered 26/6, 2014 at 18:14 Comment(0)
L
1

If you loading script correct template should have .ejs extension (or render raw script like this: render js: 'some code'). You must escape html using j in ejs template like this:

template.ejs

$('some selector').html('<%= j render('some template') %>');

Please give me also url. Correct one should end with .js.

Ladon answered 6/3, 2013 at 10:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.