我在我的网站上使用了令牌输入,这是我如何初始化令牌输入:
$(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错误:
未捕获TypeError:无法使用'in'运算符在[{“id”:“11566”,“name”:“Smith - White”}中搜索“47”}``
如何解决此错误?
答案 0 :(得分:42)
您需要将populateValue
变量中的字符串解析为对象:
prePopulate: $.parseJSON(populateValue)
或者,在简单的JS中:
prePopulate: JSON.parse(populateValue)
答案 1 :(得分:2)
您的服务器端代码表示您已编写WebMethod的.CS页面,应始终返回.ToList()
表示json数组
这是我的.CS页面代码:
<强>的WebMethod 强>
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);
}
});
答案 2 :(得分:2)
如果您将字符串用作数组,则可能会出现此错误。假如你从ajax获得了一个json,并且忘了解析结果,并将结果用作数组。解决方法如上所述,在使用之前解析json。
答案 3 :(得分:0)
我也遇到了这个错误。
C#Api返回序列化字典数据。
return JsonConvert.SerializeObject(dic_data);
return new JavaScriptSerializer().Serialize(dic_data);
继续收到此错误消息,直到我直接返回字典数据而不尝试序列化
return dic_data;
浏览器端没有更多错误。不知道为什么。