web-dev-qa-db-fra.com

Uncaught TypeError: impossible d'utiliser l'opérateur 'in' pour rechercher '' dans une chaîne JSON

J'ai utilisé l'entrée de jeton sur mon site Web, et voici comment initialiser l'entrée de jeton:

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

Le script était bloqué sur cette ligne:

 prePopulate: populateValue

Lorsque je supprime cette ligne, il n'y aura pas d'erreur javascript, mais j'en ai besoin, car je dois pré-renseigner l'entrée du jeton. La populateValue est:

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

Il y avait une erreur javascript:

Uncaught TypeError: impossible d'utiliser l'opérateur 'in' pour rechercher '47' dans [{"id": "11566", "name": "Smith - White"}] `

Comment puis-je réparer cette erreur?

15
User2012384

Vous devez analyser la chaîne de votre variable populateValue avec un objet: 

prePopulate: $.parseJSON(populateValue)

Ou alternativement, en clair JS:

prePopulate: JSON.parse(populateValue)
40
Rory McCrossan

Vous pouvez obtenir cette erreur si vous utilisez une chaîne en tant que tableau. Dites cela si vous avez un json d'un ajax, et vous avez oublié d'analyser le résultat, et d'utiliser le résultat comme un tableau. Le remède est comme ci-dessus, pour analyser le JSON avant de l’utiliser.

2
Skywalker

Votre code côté serveur signifie que la page .CS où vous avez écrit votre WebMethod doit toujours renvoyer .ToList() signifie array of json

Voici mon code de page .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);
}

Ensuite, dans ma méthode de publication 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

J'avais aussi cette erreur.

Api C # renvoyant les données du dictionnaire sérialisé.

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

Gardé à obtenir ce message d'erreur, jusqu'à ce que je viens de renvoyer les données du dictionnaire directement sans essayer de sérialiser

return dic_data;

Pas plus d'erreurs du côté du navigateur. Pas certain de pourquoi.

0
Shaakir