在参数数据中使用特殊字符调用 Ajax 时出现问题
Posted
技术标签:
【中文标题】在参数数据中使用特殊字符调用 Ajax 时出现问题【英文标题】:Problem calling Ajax with special chars in parameter data 【发布时间】:2021-07-15 13:01:39 【问题描述】:我正在使用此函数将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);
)
);
除非我尝试在文本框中输入特殊字符(如'
),否则它可以正常工作...在这种情况下,我收到此错误:
Object 消息:“传递的对象无效。预期':'o ''...", StackTrace: " 在 System.Web.Script.Serialization.javascriptOb…”,异常类型: "System.ArgumentException"
看起来我需要在调用 ajax 之前对小部件值进行编码。我尝试过:
data: "'filter':'" + encodeURIComponent(request.term) + "'",
还尝试更改contentType
,但在这两种情况下都没有成功。
【问题讨论】:
试试FormData 你建议在哪里使用这样的调用?我的意思是...encodedURIComponent()
在我的示例中调用它根本没有被调用。错误似乎出现在source
函数的参数通道中...顺便说一句我需要更改contentType
?
【参考方案1】:
这个问题很容易解决。
似乎encodeURIComponent()
在编码方面并不那么严格:在我的情况下,'
char 根本没有被编码(尽管documentation 说了什么)。无论如何 Mozilla 添加一个使用建议:
function fixedEncodeURIComponent(str)
return encodeURIComponent(str).replace(/[!'()*]/g, function (c)
return '%' + c.charCodeAt(0).toString(16);
);
正确编码'
字符(等等)。这听起来让我有点困惑,但它的工作方式......
【讨论】:
以上是关于在参数数据中使用特殊字符调用 Ajax 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
通过 jQuery 进行 ajax 调用时出现 403 错误
尝试使用 AJAX 在 Laravel 中上传单个文件时出现数组到字符串转换错误
使用 Ajax 调用 Web Api 方法时出现错误 400