wake-up-neo.net

Uncught TypeError: Der Operator 'in' kann nicht zum Suchen nach '' in der JSON-Zeichenfolge verwendet werden

Ich habe die Token-Eingabe auf meiner Website verwendet. So initialisiere ich die Token-Eingabe:

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

Das Skript stand in dieser Zeile:

 prePopulate: populateValue

Wenn ich diese Zeile entferne, wird kein Javascript-Fehler angezeigt, aber ich brauche diesen, da ich die Token-Eingabe vorbelegen muss. Die populateValue lautet:

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

Es ist ein Javascript-Fehler aufgetreten:

Nicht gefundener TypeError: Der Operator 'in' kann nicht zur Suche von '47' in [{"id": "11566", "name": "Smith - White"}]] verwendet werden

Wie kann ich diesen Fehler beheben?

15
User2012384

Sie müssen den String in Ihrer Variable populateValue zu einem Objekt parsen: 

prePopulate: $.parseJSON(populateValue)

Oder alternativ in einfachem JS:

prePopulate: JSON.parse(populateValue)
40
Rory McCrossan

Diese Fehlermeldung wird möglicherweise angezeigt, wenn Sie eine Zeichenfolge als Array verwenden. Sagen Sie, wenn Sie einen Json von einem Ajax haben und vergessen haben, das Ergebnis zu analysieren, und das Ergebnis als Array verwenden. Das Heilmittel ist wie oben, den Json vor der Verwendung zu parsen.

2
Skywalker

Ihr serverseitiger Code bedeutet .CS-Seite, auf der Sie Ihre WebMethod geschrieben haben, sollte immer .ToList() Array von json zurückgeben

Hier ist mein .CS-Seitencode:

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

Dann in meiner jQuery-Post-Methode:

$.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

Ich habe auch diesen Fehler erhalten.

C # api gibt serialisierte Wörterbuchdaten zurück.

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

Diese Fehlermeldung wurde beibehalten, bis ich die Wörterbuchdaten direkt zurückgegeben habe, ohne zu serialisieren

return dic_data;

Keine Fehler mehr auf der Browserseite. Nicht sicher warum.

0
Shaakir