未捕获的TypeError:无法使用’in’运算符在JSON字符串中搜索”

我在我的网站上使用了令牌输入,这是我如何初始化令牌输入:

$(document).ready(function () { var populateValue = document.getElementById('').value $("#").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错误:

未捕获的TypeError:不能使用’in’运算符在[{“id”:“11566”,“name”:“Smith – White”}中搜索’47’

我该如何解决这个错误?

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

 prePopulate: $.parseJSON(populateValue) 

或者,在普通JS中:

 prePopulate: JSON.parse(populateValue) 

如果您使用字符串作为数组,则可能会出现此错误。 如果你从ajax获得了一个json,并且忘了解析结果,并将结果用作数组。 解决方法如上所述,在使用之前解析json。

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

这是我的.CS页面代码:

的WebMethod

 public static string PopulateDetails(Guid id){ var prx = new ProductProxy(); var result = prx.GetFirstorDefault(id); // this method is having List 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); } }); 

我也得到了这个错误。

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

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

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

 return dic_data; 

浏览器端没有更多错误。 不知道为什么。