Javascript и Remotipart - Почему одинарные кавычки против двойных кавычек имеют значение? - PullRequest
0 голосов
/ 22 марта 2012

Итак, я столкнулся с действительно интересной проблемой при удаленной загрузке файлов с помощью Remotipart .Я попробовал следующие две версии в моем представлении update.js.erb, которое сервер отправляет после успешной загрузки файла:

<%= remotipart_response do %>
    $("#container").html('<p>Success!</p><%= link_to('Back', gallery_items_path, :remote => true) %>');
<% end %>

и

<%= remotipart_response do %>
    $("#container").html("<p>Success!</p><%= link_to('Back', gallery_items_path, :remote => true) %>");
<% end %>

Первая версия успешно изменяет разметкув #container, а во второй версии происходит сбой без каких-либо ошибок на стороне сервера или клиента.Я думал, что одиночные и двойные кавычки - это проблема, только когда JSON находится в игре, но, похоже, я ошибался.Я также заметил, что Remotipart пример использует исключительно одинарные кавычки, и я не уверен, что это специально или нет.

Я использую Rails 3.2.1, Remotipart 1.0.2и (не уверен, имеет ли это значение) Chrome 17.

Кто-нибудь знает, что вызывает это?

РЕДАКТИРОВАТЬ: В ответ на вопрос Алекса:

В первом случае,результат вывода, как и ожидалось:

<div id="container">
    <p>Success!</p>
    <a href="/gallery_items" data-remote="true">Back</a>
</div>

Во втором случае, как я уже сказал, не было никаких изменений в содержании <div id="container">.

Ответы [ 2 ]

1 голос
/ 22 марта 2012

link_to генерирует тег ссылки с двойными кавычками и закрывает кавычки в вашем JavaScript

0 голосов
/ 22 марта 2012

Фактическое значение js, переданное браузеру во втором случае, равно:

$("#container").html("<p>Success!</p><a href="/gallery_items" data-remote="true">Back</a>");

Внешняя строка заключена в " в качестве разделителя, но, поскольку содержимое также содержит ", оно разрывается.(x = "aa"bb" недопустимо).

В предыдущем примере используется разделитель ', поэтому проблем нет.

Чтобы использовать ", вы должны избежать возврата link_to впроизводить

$("#container").html("<p>Success!</p><a href=\"/gallery_items\" data-remote=\"true\">Back</a>");
...