首页 文章

发送数据时发送ajax请求是html数据

提问于
浏览
0

我在一个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用于其预期的性质?为什么$('#bodyInfo') . val()在通过ajax传递html值时不起作用?如果这个问题是重复的,我会很感激,如果有人可以给我一个链接(我尝试通过谷歌搜索,但没有找到满意的答案)

2 回答

  • 1

    's exactly what you' d使用 encodeURIComponent . 这个想法是在发送它时对(可能有问题的)值进行编码,然后在服务器端对其进行解码,以便在需要时使用它 .

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

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

  • 1

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

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

    第三个解决方案是用你知道的东西替换&chars,这些东西在你的textarea中永远不会存在,比如[@#alpha] . 希望能帮助到你

相关问题