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