Отвечайте с помощью JavaScript в приложении Rack

У меня есть приложение Rack, на которое мне нужно ответить с помощью JavaScript. Я пытаюсь установить тип контента как JavaScript, при отправке ответа, но он не работает, похоже, я что-то упускаю.

Простой ответ, который я отправляю:

require 'rubygems'   
require 'rack'  
run Proc.new { |env| ['200', {'Content-Type' => 'application/javascript'},["alert('hi')"]]} 

Может ли приложение Rack ответить типом содержимого JavaScript? Или может быть браузер не выполняет полученный JavaScript?


person Lohith MV    schedule 15.12.2014    source источник
comment
Вы смотрели сетевой трафик в Firebug или Chrome Tools?   -  person Paul    schedule 15.12.2014
comment
не могли бы вы показать остальную часть промежуточного программного обеспечения? ответ выглядит нормально   -  person yoavmatchulsky    schedule 15.12.2014
comment
Можете ли вы опубликовать JS, который получает этот ответ?   -  person DiegoSalazar    schedule 15.12.2014
comment
@yoavmatchulsky Это простой двухстрочный код, запускаемый Proc.new { |env| ['200', {'Content-Type' =› 'application/javascript'},[alert('hi')]], в браузере отображается как текст вместо выполнения javascript.   -  person Lohith MV    schedule 15.12.2014
comment
@diego.greyrobot alert('hi') отображается в браузере как HTML/текст вместо выполнения javascript   -  person Lohith MV    schedule 15.12.2014
comment
Я думаю, что это актуально: stackoverflow.com/questions/7717382/. То, что вы делаете, нормально с точки зрения установки типа содержимого, но браузер не будет выполнять код js, загруженный напрямую таким образом.   -  person matt    schedule 15.12.2014


Ответы (1)


как сказал @matt выше, и я пытался понять, что вы не можете просто дать браузеру js и ожидать, что он запустится. Он должен быть выполнен обратным вызовом ajax. Возьмем, к примеру, jQuery:

$.ajax({
  url: "/path/to/your/js",
  dataType: "script"
});

Это свойство dataType сообщает jQuery о выполнении сценария, возвращаемого сервером. Дело в том, что вам нужен javascript для выполнения javascript, простой переход по URL-адресу не поможет.

person DiegoSalazar    schedule 15.12.2014