#javascript #jquery #html #ajax
#javascript #jquery #HTML #ajax
Вопрос:
Я работал над программой на mvc, где одним нажатием кнопки я отправляю данные внутри текстовой области на контроллер. Обычно мой код работал так, как ожидалось, но это был не тот случай, когда данные внутри текстовой области состояли из данных на основе html.
HTML-код:
<textarea id="bodyInfo"> </textarea>
<button onclick="Submit()" id="submitInfo">Create Notification</button>
ajax:
function Submit() {
$.ajax({
url: '@Url.Action("GetResults", "notification")',
type: 'GET',
data: { body: $('#bodyInfo').val()),
cache: 'false',
dataType: 'html',
success: function (result) {
$('#resultsTblInfo').html(result);
}
});
return false;
}
Примерный пример данных текстовой области:
<table style="width:100%">
<tbody>
<tr>
<td class="ellipses-title" style="color:#22557f;font-size:15px;font-weight:bold;margin-bottom:10px;margin-top:7px;border-right:1px solid #BFF1FD;text-align:right;padding-right:15px;"> The New Admin is Coming</td>
<td class="ellipses-text" style="padding-left:15px;" valign="center">Hello<br> Hello2</a>.
</td>
</tr>
</tbody>
</table>
То, что было видно выше, сработало бы, если бы TextArea состоял не из html-данных, а из необработанного текста, но не сработало бы, если бы это были html-данные.
Я смог выполнить эту работу, используя
«encodeURIComponent($(‘#bodyInfo’).val())» вместо «$ (‘#bodyInfo’).val()»
На стороне контроллера выполняется
«body = HttpUtility.UrlDecode (тело)»;
Есть ли лучшие альтернативы для достижения того же результата? Использую ли я encodeURIComponent вопреки его предполагаемому характеру? Почему $ (‘#bodyInfo’).val() не работает при передаче html-значений через ajax? Если этот вопрос является дубликатом, я был бы признателен, если бы кто-нибудь мог предоставить мне ссылку (я попытался выполнить поиск через Google, но не нашел удовлетворительного ответа)
Ответ №1:
Это именно то, для чего вы бы использовали encodeURIComponent
. Идея состоит в том, чтобы кодировать (потенциально проблематичное) значение при его отправке, а затем декодировать его на стороне сервера, чтобы использовать его так, как это необходимо.
На самом деле, на странице документации MDN encodeURIComponent
есть пример этого:
Чтобы избежать неожиданных запросов к серверу, вы должны вызывать encodeURIComponent для любых введенных пользователем параметров, которые будут переданы как часть URI. Например, пользователь может ввести «Thyme amp; time =again» для комментария к переменной. Неиспользование encodeURIComponent для этой переменной приведет к повторному получению comment=Thyme amp; time = . Обратите внимание, что амперсанд и знак равенства обозначают новую пару ключ-значение.
Ответ №2:
Я думаю, что в ваших HTML-данных textarea был символ «amp;». таким образом, проблема в том, что символ amp; не может быть отправлен на сервер. это связано с тем, что при отправке данных браузер собирает данные, разделенные символом amp; http://example.php?a=somethingamp;b=other
. таким образом, если в ваших данных есть символ amp;, браузер не сможет определить, является ли это компонентом данных или URI.
Распространенным решением является преобразование ваших данных в текст на base64 перед их отправкой. таким образом, вы можете декодировать его на своем сервере с помощью base64_decode
функции (case of php)
. вы можете закодировать свои данные в base64 с помощью window.btoa
функции в javascript. вы использовали другое решение.
третье решение — заменить amp; chars чем-то, что, как вы знаете, никогда не будет существовать в вашей текстовой области, например [@#alpha]. надеюсь, это поможет