AJAX帖子上不常见的行为

时间:2014-10-22 13:57:14

标签: javascript php jquery mysql ajax

当我尝试通过AJAX jQuery发布两次符号??时,它会像jQuery18306004520743153989_1413985407818一样发布。例如,如果我发布此帖子:What ??则会发布What jQuery18306004520743153989_1413985407818,如果我的帖子如下:What ???则会发布如下:What jQuery18306004520743153989_1413985407818?< - 注意结局一个?

为什么会这样?

我的jQuery发布代码是:

$( ".textbox2" ).on( 'keypress', function (e) {

            if (e.keyCode == 13 && !e.shiftKey)
            {
                e.preventDefault();

                var message = $( "#message" ).val(),
                    privateid = $( "#private" );

                if (message == '')
                {
                    alert( "Message is missing!!" );
                    return;
                }

                if (privateid.is( ':checked' ) ? 1 : 0)
                {
                    var privateidVal = privateid.val();
                }

                $.ajax( {
                            type     : "post",
dataType: "json",
                            url      : "chat_insert.php",
                            data     : "message=" + message + "&private=" + privateidVal + "&action=addcomment",
                            success  : function (data) {

                                showComment();
                                document.getElementById( 'message' ).value = '';
                                document.getElementById( 'message' ).focus();
                                document.getElementById( 'private' ).checked = '';


if (data.error) {
alert(data.error);
    }
                            }
                        } );
            }

        } );

并且是SQL中的message列具有归类utf8_general_ci

请帮忙

1 个答案:

答案 0 :(得分:4)

您需要对您传递的参数进行编码:

       data     : "message=" + 
                  encodeURIComponent(message) + 
                  "&private=" + 
                  encodeURIComponent(privateidVal) + 
                  "&action=addcomment",

或者,您可以设置"数据"组件作为对象,jQuery将为您完成这项工作:

        data    : {
          message: message,
          private: privateidVal,
          action: "addcomment"
        },

同样在我的时候,这一行:

            if (privateid.is( ':checked' ) ? 1 : 0)

可以更简单地写成

            if (privateid.is( ':checked' ))

.is()函数将返回一个已在if测试中直接使用的值。