在ajax.post请求中发送unicoded字符串

时间:2012-07-22 13:04:13

标签: jquery asp.net-mvc-3 livechat

我正在使用“livechatstarterkit”在我的mvc网络应用中进行聊天功能。但我的Web应用程序采用从右到左的语言,用户使用波斯语命名。

这里的问题是,当用户使用波斯语名称登录为运营商时,他的名字编码了以下脚本的原因:

<script type="text/javascript">
        var intervalId;
        var chatId = '@(Model)';
        var lastMsgId = 0;
        var opname = '@ViewBag.opname';
        $(document).ready(function () {
            getMsgs();
            intervalId = window.setInterval(function () {
                getMsgs();
            }, 3210);

            $('#chatText').keyup(function (e) {
                if (e.keyCode == 13) {
                    $.post('/chat/addmsg', { id: chatId, from: opname, msg: $('#chatText').val() }, function (data) { getMsgs(); });
                    $('#chatText').val('');
                }
            });
.....

但是当我调试我的应用程序时,我看到来自运营商的消息未被发送,实际上$.post('/chat/addmsg'....代码未执行且请求未被发送到正确的操作。

这是jscript中opname的一些例子:“&#1662;&#1588;&#1578;&#1740;&#1576;&#1575;&#1606;&#1740;

2 个答案:

答案 0 :(得分:1)

$.ajax({
  url:"ax.php?action=post&save=1", 
  type: "POST", 
  data:
    { tabName: "basic", 
    rid: $("textarea#id").val(), 
    col:"id", 
    val:$(this).prev().val() },
  success:function (result){ setSpan(result);},
  dataType:"html", contentType: "text/plain; charset=UTF-8" } )

如何使用$.ajax函数,以便设置contentType属性。

  

将数据发送到服务器时,请使用此内容类型。默认是   “application / x-www-form-urlencoded”,对大多数情况来说都很好。如果   你明确地将内容类型传递给$ .ajax()然后它将永远是   发送到服务器(即使没有数据发送)。数据永远是   使用UTF-8字符集传输到服务器;你必须解码这个   适当地在服务器端。

答案 1 :(得分:1)

替换:

var opname = '@ViewBag.opname';

使用:

var opname = @Html.Raw(Json.Encode(ViewBag.opname));

另外,为了测试是否以跨浏览器方式按下 Enter ,您的代码应如下所示:

$('#chatText').keyup(function (e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    if (code == 13) {
        var url = '@Url.Action("addmsg", "chat")';
        var msg = $(this).val();
        $.post(url, { id: chatId, from: opname, msg: msg }, function (data) { 
            getMsgs(); 
        });
        $(this).val('');
    }
});