在参数数据中使用特殊字符调用Ajax时出现问题



我正在使用此函数将JQuery.autocomplete应用于文本框小部件:

function GetData(dest_widget) {
dest_widget.autocomplete({
minLength: 3,
source: function (request, response) {
$.ajax({
type: "POST",
url: "/Service/WSDataService.asmx/GetData",
contentType: "application/json; charset=utf-8",
data: "{'filter':'" + request.term + "'}",
dataType: "json",
async: true,
success: function (data) {
var _data_array = data.d.split("<br />");
response(_data_array);
},
error: function (result) {
alert("GetData() error" + result);
}
})
}
});
}

除非我尝试在文本框中输入特殊字符(如'(,否则它可以正常工作。。。在这种情况下,我得到了这个错误:

对象{消息:"传递的对象无效。应为":"o"}"…";,StackTrace:";在里面System.Web.Script.Serialization.JavaScriptOb…";,例外类型:"System.ArgumentException

看起来我需要在调用ajax之前对小部件值进行编码。。我尝试过:

data: "{'filter':'" + encodeURIComponent(request.term) + "'}", 

并尝试改变CCD_ 3,但两种情况都没有成功。

这个问题很容易解决。encodeURIComponent()在编码方面似乎并不那么严格:在我的案例中,'字符根本没有编码(尽管文档中有这样的说法(。无论如何,Mozilla添加了一个使用建议:

function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
return '%' + c.charCodeAt(0).toString(16);
});
}

正确编码'个字符(以及其他字符(。这听起来有点让我困惑,但顺便说一句。。。

最新更新