未捕获的类型错误:无法使用“in”运算符在 JSON 字符串中搜索“”

Posted

技术标签:

【中文标题】未捕获的类型错误:无法使用“in”运算符在 JSON 字符串中搜索“”【英文标题】:Uncaught TypeError: Cannot use 'in' operator to search for '' in JSON string 【发布时间】: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'

我该如何解决这个错误?

【问题讨论】:

【参考方案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;

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

【讨论】:

以上是关于未捕获的类型错误:无法使用“in”运算符在 JSON 字符串中搜索“”的主要内容,如果未能解决你的问题,请参考以下文章

Jquery - 未捕获的类型错误:无法使用“in”运算符在中搜索“324”

未捕获的类型错误:无法使用“in”运算符在未定义的 vue 路由器中搜索“路径”

未捕获的类型错误:无法使用“in”运算符在 JSON 字符串中搜索“”

未捕获的类型错误:无法使用“in”运算符在 null 中搜索“SUPPORT_COOKIES”

未捕获的类型错误:无法调用 jquery jsonrpc 客户端中未定义的方法“设置”

我得到一个未被捕获的类型错误,在尝试获取div时无法读取未定义的属性长度