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

时间:2014-05-15 08:38:41

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

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

$(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”}``

如何解决此错误?

4 个答案:

答案 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;

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