Проблема рендеринга ванильного JavaScript в Ruby - PullRequest
0 голосов
/ 20 октября 2010

В моем контроллере я пытаюсь отобразить ванильный JavaScript, но получаю неожиданный результат. Это код

class UploadController < ApplicationController

    def index

        render :file => 'app\views\upload\uploadfile.rhtml'

    end

    def uploadFile

        render :js => "alert('Hello Rails');"

       post = DataFile.save(params[:upload])

    end

end

Ожидаю перед выполнением post = DataFile.save (params [: upload]) Я должен увидеть окно предупреждения, но вижу окно загрузки. В чем может быть проблема?

1 Ответ

1 голос
/ 20 октября 2010

render :js отправит данные с типом MIME text/javascript Браузеры увидят это и попытаются загрузить или отобразить их (мой браузер, Chromium, отображает файлы .js в виде открытого текста.)

render :jsна самом деле предназначен для возврата некоторого JavaScript, который будет обработан кодом уже на этой странице.

По сути, вы можете получить вызов AJAX из jQuery:

$.ajax({
  type: "POST",
  url: "tokens/1/destroy.js",
  data: { _method: 'DELETE', cell: dsrc.id }
});

Это некоторый код, взятый из моего проекта.Здесь dataType не определен, поэтому jQuery разумно «угадывает», какой тип данных возвращается.Он видит, что это MIME-тип: text/javascript, и выполняет его.Что, если бы мы использовали ваш код, привело бы к появлению диалогового окна с предупреждением.

По сути, вам необходимо загрузить уже загруженную страницу, и страница должна ждать, пока "vanilla JavaScript"будет возвращено.

Если вы просто хотите выполнить какой-то код для этого конкретного действия, вам просто нужно обернуть его, используя javascript_tag в вашем шаблоне / представлении, или включить внешний файл .js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...