2013-02-23 18 views
5

w jednym projekcie kopalni, kod:Dlaczego muszę dodać „dane: {type:«skrypt»}” na zdalne połączenie z szyn/ajax

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

może załadować formę zdalnego poprawnie.

Ale niektórzy nie mogą pracować, przeglądarka nie wykonała odpowiedniego kodu js. Muszę dodać "data: {type:" script "}" tak:

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

Chcę poznać przyczynę.

+0

Czy możesz dodać trochę więcej kodu? – Kamil

Odpowiedz

4

Im nie JS ekspertem, a ja nie wiem, Ruby, ale myślę:

Gdy typ danych jest ustawiony na script - pobrać kod jest ładowany i wykonywany natychmiast.

Gdy typ danych jest domyślny (html) - pobrany kod jest właśnie ładowany do przeglądarki. Musisz wykonać to "ręcznie" (np. Wywołując jakąś funkcję).

Jeśli twój kod ma tylko kilka funkcji do użycia z wcześniej załadowanym kodem - te funkcje będą dostępne i będą działać (gdy typem danych jest html).

Jeśli w kodzie są zdefiniowane zdarzenia - nie będą działać, ponieważ nie zostały zainicjalizowane, ponieważ kod nie został wykonany.

Jeśli moje wyjaśnienie jest złe - możesz przeczytać o różnicach między metodami jQuery.get() i jQuery.getScript().

1

Jeśli ładujesz poprawny szablon skryptu, powinieneś mieć rozszerzenie .ejs (lub wyrenderować surowy skrypt w ten sposób: render js: 'some code'). Musisz uciec HTML za pomocą j w Ejs szablonie tak:

template.ejs

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

Proszę dać mi też adres URL. Prawidłowe powinno się kończyć na .js.

2

Za kulisami jQuery ajax metoda stosowana jest: http://api.jquery.com/jquery.ajax/ przez uJS https://github.com/rails/jquery-ujs gdy atrybut linku data-remote="true" jest ustawiony, która jest wykonywana przez remote: true.

Jak podano w dokumentacji, Ajax określa nagłówek HTTP akceptuje wysyłane i interpretuje wartości zwracanej w oparciu o dataType i accepts argumentów przekazanych do ajax(), które tutaj są pobierane z atrybutami data- kotwy przez uJS.

Jeśli nie ustawiono dataType za pomocą atrybutu data-type, jQuery domyślnie wnioskuje o żądanie i typ odpowiedzi "inteligentnie". Może to wyjaśnić niespójności, jeśli nie zostanie to wyraźnie określone.