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

时间:2016-10-21 16:42:15

标签: javascript jquery html ajax

我在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数据时会失败,上面看到的内容会起作用。

我能够使用

完成这项工作

&#34; encodeURIComponent方法($(&#39;#bodyInfo&#39;。)VAL())&#34;代替&#34; $(&#39;#bodyInfo&#39;)。val()&#34;

在控制器方面,执行

&#34; body = HttpUtility.UrlDecode(body)&#34 ;;

是否有更好的替代品来实现同样的目标?我是否将encodeURIComponent用于其预期的性质?为什么$(&#39;#bodyInfo&#39;)。val()在通过ajax传递html值时不起作用?如果这个问题是重复的,我会很感激,如果有人可以给我一个链接(我尝试通过谷歌搜索,但没有找到令人满意的答案)

2 个答案:

答案 0 :(得分:1)

我认为在你的textarea html数据中,有一个“&amp;”字符。 是这样,问题是,角色和无法发送到服务器。这是因为在发送数据时,浏览器会收集数据,并由&amp;字符http://example.php?a=something&b=other。所以,如果有&amp;如果数据是数据或URI组件,则浏览器将无法区分数据中的字符。

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

第三种解决方案是替换&amp;通过你知道的东西来表示它将永远不会存在于你的textarea中,如[@#alpha]。 希望它有所帮助

答案 1 :(得分:1)

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

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

  

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

相关问题