【问题标题】:Uncaught TypeError: Cannot use 'in' operator to search for '' in JSON string未捕获的类型错误:无法使用“in”运算符在 JSON 字符串中搜索“”
【发布时间】:2014-07-03 14:27:26
【问题描述】:

我在我的网站中使用了令牌输入,下面是我初始化令牌输入的方法:

$(document).ready(function () {           
    var populateValue = document.getElementById('<%= hiddentokenPrePopulate.ClientID%>').value
    $("#<%= tokenEmployee.ClientID%>").tokenInput("../Employee/getEmployeeDetails.ashx", {
        deleteText: "X",
        theme: "facebook",
        preventDuplicates: true,
        tokenDelimiter: ";",
        minChars: 3,
        tokenLimit: 1,
        prePopulate: populateValue
    });
});

脚本卡在这一行:

 prePopulate: populateValue

当我删除这一行时,不会有任何 javascript 错误,但我需要这个,因为我需要预先填充令牌输入。 populateValue 是:

[{
    "id": "11566",
    "name": "Smith - White"
}]

出现 javascript 错误:

未捕获的类型错误:无法使用 'in' 运算符在 [{"id":"11566","name":"Smith - White"}]` 中搜索 '47'

我该如何解决这个错误?

【问题讨论】:

    标签: javascript jquery asp.net json jquery-tokeninput


    【解决方案1】:

    您需要将populateValue 变量中的字符串解析为一个对象:

    prePopulate: $.parseJSON(populateValue)
    

    或者,在纯 JS 中:

    prePopulate: JSON.parse(populateValue)
    

    【讨论】:

      【解决方案2】:

      如果您将字符串用作数组,则可能会出现此错误。假设您从 ajax 获得了一个 json,而您忘记解析结果,并将结果用作数组。补救方法如上,使用前先解析json。

      【讨论】:

        【解决方案3】:

        您的服务器端代码表示您编写 WebMethod 的 .CS 页面,应始终返回 .ToList() 表示 json 数组

        这是我的 .CS 页面代码:

        网络方法

        public static string PopulateDetails(Guid id){
            var prx = new ProductProxy();
            var result = prx.GetFirstorDefault(id); // this method is having List<ClassObject> return type
            return JsonConvert.SerializeObject(result);
        }
        

        然后在我的 jQuery post 方法中:

        $.ajax({
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            url: "Productjq.aspx/PopulateDetails",
            data: JSON.stringify({id: id}), // This is Id of selected record, to fetch data
            success: function(result) {
                var rspns = eval(result.d); // eval is used to get only text from json, because raw json looks like "Id"\"1234"
        
                $.each(rspns, function() {
                    $('#<%=txtProductName.ClientID %>').val(this.Name);
                });
            },
            error: function(xhr, textStatus, error) {
                alert('Error' + error);
            }
        });
        

        【讨论】:

          【解决方案4】:

          我也遇到了这个错误。

          C# Api 返回序列化字典数据。

          return JsonConvert.SerializeObject(dic_data);
          return new JavaScriptSerializer().Serialize(dic_data);
          

          一直收到此错误消息,直到我直接返回字典数据而不尝试序列化

          return dic_data;
          

          浏览器端不再出现错误。不知道为什么。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-07-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-01
            • 1970-01-01
            • 2018-08-02
            相关资源
            最近更新 更多