2014-09-21 2 views
-1

Это было задано несколько раз, однако, похоже, в Интернете нет хорошего ответа. Чтобы избежать ответов или ссылок, которые не отвечают на этот вопрос, я буду перефразировать его. Страница имеет только форму с текстом ввода (и кнопкой). Мы отправляем текст на сервер и хотим, чтобы он просто был отправлен обратно и был предупрежден. Другими словами, вид должен иметь строку:Может ли AJAX использоваться с Sinatra?

$.post(...,$("form").serialize(),function(reply){alert(reply);}); 

С PhP, ответ «эхо» один вкладыш. Можно ли это сделать в Sinatra - я понимаю, что базовые структуры построены вокруг обработки манипуляций с DOM. Я задаю этот вопрос, потому что было бы неплохо использовать более выразительный язык, такой как Ruby, также для интерфейса db interface/backend.

Edit: Это /views/index.erb (с "/ ответ" вместо "reply.php" - в противном случае index.html/index.php) часть:

<script src="jquery"></script> 

<form action="reply.php" method="post"><input type="text" name="t"></form> 

<script> 
$(document).ready(function(){ 
    $("form").submit(function(event){ 
     event.preventDefault(); 
     $.post("reply.php",$("form").serialize(),function(reply){alert(reply);}); 
    }); 
}); 
</script> 

Обратите внимание, что с event.preventDefault() мы оставайтесь на / маршрута и не заходите в /reply.php, , который удалил бы форму и распечатал только текст. Другими словами, это , что позволяет Ajax и мы получим ответ (только в боевой готовности) с сервера с reply.php:

echo $_POST["t"]; 

С Синатра, мы должны иметь routes.rb контроллер:

require 'sinatra' 

get '/' do 
    erb :index 
end 

post '/reply' do 
    ... 
end 

Вопрос: С index.html/reply.php мы получаем предупреждение с опубликованным текстом. Как можно index.erb/routes.rb изменить, чтобы получить предупреждение с опубликованным текстом?

+1

Да, это можно сделать в Синатре. Однако вам кажется, что вам нужна конкретная помощь с чем-то на лицевой стороне. Здесь недостаточно подробных сведений о том, что вам нужно. Я голосую, чтобы закрыть. –

+0

@Mark Thomas Я отредактировал свой вопрос с да/нет, как. – observer

+0

Это лучший вопрос сейчас. Голосование для повторного открытия. –

ответ

2

Да, это можно сделать с помощью Sinatra. Любой маршрут может возвращать данные с сервера клиенту; по умолчанию это посылается с типом text/html мим, но вы также можете вернуть обычный текст с соответствующим типом пантомимы:

post "/reply.php" do 
    content_type :text 
    params['t'] 
end 

Если вы хотите, чтобы эхо больше, чем одно значение обратно, вы можете увидеть все значения запроса используя код от this question.

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

+0

Спасибо за ответ! Предлагаемый вами блок работает, но требуется маршрут, который переопределяет передачу ответа на предупреждение. Как выпустить предупреждение? – observer

+1

@observer, похоже, вы сбиты с толку относительно того, что происходит в браузере и сервере. «Эхо» выше - это маршрут и может быть любым, например. "/ API/v1/эхо". Предупреждение происходит в браузере. Независимо от того, что JS вызывает бэкэнд-эхо-сервис, вы можете вызвать предупреждение в браузере. –

+0

@Mark Thomas Я понимаю, что у нас есть сообщение «/ route» do ... end with

и $ .post ("/ route", ..., ...). Мой вопрос: какова возможная эхо-функция для запуска предупреждения или это невозможно, потому что структура - это жесткая структура с маршрутами? – observer

Смежные вопросы