当我尝试通过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
。
请帮忙
答案 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
测试中直接使用的值。