it-roy-ru.com

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

Скрипт застрял в этой строке:

 prePopulate: populateValue

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

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

Произошла ошибка JavaScript:

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

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

15
User2012384

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

prePopulate: $.parseJSON(populateValue)

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

prePopulate: JSON.parse(populateValue)
40
Rory McCrossan

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

2
Skywalker

Ваш код на стороне сервера означает страницу .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);
    }
});
2
user4359691

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

C # Api, возвращающий данные из сериализованного словаря.

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

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

return dic_data;

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

0
Shaakir