Frage Warum brauche ich hinzufügen "Daten: {Typ:" Skript "}" auf Remote-Link mit Schienen / Ajax


in einem Projekt von mir, der Code:

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

kann remote Formular korrekt laden.

Aber jemand kann nicht arbeiten, der Browser hat den responsiven js-Code nicht ausgeführt. Ich muss "data: {type:" script "} wie folgt hinzufügen:

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

Ich möchte den Grund wissen.


5
2018-02-23 14:19


Ursprung


Antworten:


Ich bin kein JS Experte, und ich kenne Ruby nicht, aber ich denke:

Wenn der Datentyp auf eingestellt ist script - heruntergeladener Code wird geladen und sofort ausgeführt.

Wenn der Datentyp Standard ist (html) - heruntergeladener Code wird gerade in den Browser geladen. Sie müssen es "manuell" ausführen (indem Sie beispielsweise eine Funktion aufrufen).

Wenn Ihr Code nur einige Funktionen zur Verwendung mit zuvor geladenem Code hat, sind diese Funktionen verfügbar und funktionieren (wenn der Datentyp ist) html).

Wenn in Ihrem Code definierte Ereignisse definiert sind - diese funktionieren nicht, weil sie nicht initialisiert wurden, weil der Code nicht ausgeführt wurde.

Wenn meine Erklärung schlecht ist - können Sie über den Unterschied zwischen lesen jQuery.get() und jQuery.getScript() Methoden.


4
2018-02-27 15:12



Hinter den Kulissen, jQuery's ajax Methode wird verwendet: http://api.jquery.com/jquery.ajax/ durch uJS https://github.com/rails/jquery-ujs wann immer die data-remote="true" Attribut des Links wird gesetzt, was durch erfolgt remote: true.

Wie in der Dokumentation angegeben, bestimmt Ajax den gesendeten HTTP-Accepts-Header und interpretiert den Rückgabewert basierend auf dem dataType und accepts Argumente übergeben an ajax(), die hier aus der data- Attribute des Ankers durch uJS.

Wenn nein dataType wird durch die gestellt data-type Attribut, jQuery leitet die Anfrage und den Antworttyp "intelligent" ein. Dies kann Inkonsistenzen erklären, wenn Sie sie nicht explizit angeben.


2
2018-06-26 18:14



Wenn Sie das Laden der richtigen Vorlage Skript haben sollten .ejs Erweiterung (oder rendere rohe Skript wie folgt: render js: 'some code'). Sie müssen mit HTML entkommen j in ejs Vorlage wie folgt:

Vorlage.ejs

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

Bitte gib mir auch URL. Richtig sollte mit enden .js.


1
2018-03-06 10:11