未捕获的类型错误:无法使用“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”