Uncaught TypeError: не может использовать оператор 'in' для поиска '' в строке JSON

Я использую входной токен на своем веб-сайте, и вот как я инициализирую входной токен:

$(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
    });
});

script застрял в этой строке:

 prePopulate: populateValue

Когда я удаляю эту строку, ошибки javascript не будет, но мне нужно это, поскольку мне нужно предварительно заполнить входной токен. populateValue:

[{
    "id": "11566",
    "name": "Smith - White"
}]

Возникла ошибка javascript:

Uncaught TypeError: не может использовать оператор 'in' для поиска '47' в [{ "id": "11566", "name": "Smith - White" }] `

Как я могу исправить эту ошибку?

Ответы

Ответ 1

Вам нужно проанализировать строку в переменной populateValue для объекта:

prePopulate: $.parseJSON(populateValue)

Или, альтернативно, в простой JS:

prePopulate: JSON.parse(populateValue)

Ответ 2

Ваш код на стороне сервера означает страницу .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<ClassObject> return type
    return JsonConvert.SerializeObject(result);
}

Затем в моем почтовом методе jQuery:

$.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);
    }
});

Ответ 3

Вы можете получить эту ошибку, если используете строку в виде массива. Скажите, что если у вас есть json из ajax, и вы забыли проанализировать результат и использовать результат в виде массива. Средство находится так же, как описано выше, для анализа json перед его использованием.

Ответ 4

Я тоже получал эту ошибку.

С# Api возвращает данные Serialized Dictionary.

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

Сохранялось получение этого сообщения об ошибке, пока я просто не вернул данные словаря напрямую, не пытаясь выполнить Serialize

return dic_data;

Больше ошибок на стороне браузера. Не знаю, почему.