【问题标题】:Sending ajax request when data sent is html data当发送的数据是html数据时发送ajax请求
【发布时间】:2016-10-21 16:42:15
【问题描述】:

我在一个 mvc 程序上工作,单击一个按钮,我将 TextArea 内的数据发送到控制器。通常,我的代码按预期工作,但当 TextArea 内的数据由基于 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;
    }

TextArea 数据示例:

<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(body)";

是否有更好的选择来实现相同的目标?我是否在违背其预期性质使用 encodeURIComponent ?为什么通过ajax传递html值时$('#bodyInfo').val()不起作用?如果这个问题是重复的,如果有人能给我一个链接,我将不胜感激(我尝试通过谷歌搜索但没有找到令人满意的答案)

【问题讨论】:

    标签: javascript jquery html ajax


    【解决方案1】:

    这正是您使用encodeURIComponent 的目的。这个想法是在发送时对(可能有问题的)值进行编码,然后在服务器端对其进行解码,以便在需要时使用它。

    事实上,在MDNencodeURIComponent 文档页面上有一个这样的例子:

    为避免对服务器的意外请求,您应该对将作为 URI 的一部分传递的任何用户输入的参数调用 encodeURIComponent。例如,用户可以为变量注释键入“Thyme &time=again”。不在此变量上使用 encodeURIComponent 将再次给出 comment=Thyme%20&time=。请注意,与号和等号标记了一个新的键值对。

    【讨论】:

      【解决方案2】:

      我认为在您的 textarea html 数据中,有一个“&”字符。 是这样,问题是字符 & 不能发送到服务器。这是因为在发送数据时,浏览器会收集数据,由 & 字符 http://example.php?a=something&amp;b=other 分隔。因此,如果您的数据中有 & 字符,浏览器将无法区分它是数据还是 URI 组件。

      常见的解决方案是在发送数据之前将数据转换为 base64 文本。这样您就可以使用base64_decode fonction (case of php) 在您的服务器中对其进行解码。您可以使用 javascript 中的 window.btoa 函数对您的数据进行 base64 编码。另一个解决方案是你使用的。

      第三种解决方案是用你知道它在你的文本区域中永远不会存在的东西替换 & 字符,比如 [@#alpha]。 希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2011-05-22
        • 2020-01-11
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-22
        相关资源
        最近更新 更多