【问题标题】:Problem calling Ajax with special chars in parameter data在参数数据中使用特殊字符调用 Ajax 时出现问题
【发布时间】: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

标签: jquery asp.net ajax


【解决方案1】:

这个问题很容易解决。 似乎encodeURIComponent() 在编码方面并不那么严格:在我的情况下,' char 根本没有被编码(尽管documentation 说了什么)。无论如何 Mozilla 添加一个使用建议:

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

正确编码' 字符(等等)。这听起来让我有点困惑,但它的工作方式......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多