Вместо проверки просто выполните действие (веб-запрос, почту, ftp и т. д.) и будьте готовы к сбою запроса, что вам нужно сделать в любом случае, даже если ваш чек был успешным.
Рассмотрим следующее:
1 - check, and it is OK
2 - start to perform action
3 - network goes down
4 - action fails
5 - lot of good your check did
Если сеть не работает, ваше действие завершится так же быстро, как пинг и т. д.
1 - start to perform action
2 - if the net is down(or goes down) the action will fail
Потому что вы не хотите, чтобы пользователи публиковали JavaScript, который на самом деле выполняет браузер?
Это легче понять, если разделить код на две части.
Первая часть $ ("# reviews"). Append ("<% = ...% > ");
- это javascript с erb. Это означает, что <% = ...%>
будет заменен тем, что возвращает код рубина внутри него. Результатом этой замены должен быть действующий javascript, иначе он выдаст ошибку, когда клиент попытается обработать его. Итак, первое: вам нужен действительный javascript .
Еще одна вещь, которую следует принять во внимание, это то, что все, что сгенерирует Ruby, должно содержаться внутри строки javascript с двойными кавычками - обратите внимание на двойные кавычки вокруг <% = ...%>
. Это означает, что сгенерированный javascript будет выглядеть так:
$("#reviews").append("...");
Теперь давайте ' s исследуйте рубиновую часть внутри <% = ...%>
. Что делает render (: partial => @review)
? Это частичный рендеринг - что означает, что он может рендерить любой код - html, css ... или даже больше javascript!
Итак, что произойдет, если наш партиал будет содержать какой-нибудь простой html, как этот?
<a href="/mycontroller/myaction">Action!</a>
Помните, что ваш javascript использовал строку в двойных кавычках в качестве параметра? Если мы просто заменим <% = ...%>
на код этого партиала, то у нас возникнет проблема - сразу после href =
стоит двойная кавычка! Javascript не будет действительным:
// Without escaping, you get a broken javascript string at href
$("#reviews").append("<a href="/mycontroller/myaction">Action!</a>");
Чтобы этого не произошло, вы хотите экранировать эти специальные символы, чтобы ваша строка не обрезалась - вместо этого вам нужно что-то, что генерирует это:
<a href=\"/mycontroller/myaction\">Action!</a>
Это то, что делает escape_javascript
. Это гарантирует, что возвращенная строка не «сломает» javascript. Если вы воспользуетесь им, то получите желаемый результат:
$("#reviews").append("<a href=\"/mycontroller/myaction\">Action!</a>")
С уважением!
пользователи могут публиковать вредоносные код (злонамеренные пользователи), который, если его не экранировать, потенциально может быть запущен, позволяя пользователям управлять вашим приложением.
попробуйте следующее:
<% variable = '"); alert("hi there' %>
$("#reviews").append("<%= variable %>");
не совсем знаком с синтаксисом rails, но если вы не избежите переменной
, тогда появится окно предупреждения, и я не думаю, что это предполагаемое поведение.