2013-02-23 4 views
5

in einem Projekt von mir, der Code:Warum ich "Daten: {type: "muß hinzufügen Skript"}" auf Remote-Verbindung mit Schienen/Ajax

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

korrekt Remote Form laden.

Aber einige kann nicht funktionieren, Browser hat nicht ausgeführt, die Responses Js-Code. Ich muss hinzufügen "Daten: {Typ:" Skript "}" wie folgt:

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

Ich möchte den Grund wissen.

+0

Können Sie ein wenig mehr Code hinzufügen? – Kamil

Antwort

4

Im nicht JS-Experten, und ich weiß nicht, Rubin, aber ich denke:

Wenn Datentyp script gesetzt wird - heruntergeladenen Code geladen und sofort ausgeführt.

Wenn der Datentyp Standard ist (html) - heruntergeladener Code wird nur 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, stehen diese Funktionen zur Verfügung und funktionieren (wenn der Datentyp html ist).

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

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

1

Wenn Sie Skript laden korrekte Vorlage sollte .ejs Erweiterung haben (oder rendern rohe Skript wie folgt: render js: 'some code'). Sie müssen mit HTML j in ejs Vorlage wie folgt entkommen:

template.ejs

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

Bitte geben Sie mir auch url. Die richtige sollte mit .js enden.

2

Hinter den Kulissen wird ajax Methode von jQuery verwendet: http://api.jquery.com/jquery.ajax/ von UJS https://github.com/rails/jquery-ujs, wenn das data-remote="true" Attribut der Verbindung gesetzt, die durch remote: true erfolgt.

Wie in der Dokumentation angegeben, bestimmt Ajax der HTTP-Header akzeptiert gesendet und interpretiert die Rückgabewert auf der Grundlage der dataType und accepts Argumente ajax() übergeben, die hier von den data- Attribute des Ankers durch UJS getroffen werden.

Wenn kein dataType über das Attribut data-type festgelegt wird, leitet jQuery die Anforderung und den Antworttyp "intelligent" mit ein. Dies kann Inkonsistenzen erklären, wenn Sie sie nicht explizit angeben.