web-dev-qa-db-ja.com

Uncaught TypeError: 'in'演算子を使用してJSON文字列で ''を検索することはできません

Webサイトでトークン入力を使用しましたが、トークン入力を初期化する方法は次のとおりです。

$(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エラーが発生しました:

不明なTypeError:[{"id": "11566"、 "name": "Smith-White"}] `で 'in'演算子を使用して '47'を検索することはできません

このエラーを修正するにはどうすればよいですか?

15
User2012384

populateValue変数の文字列をオブジェクトに解析する必要があります。

prePopulate: $.parseJSON(populateValue)

または、プレーンJSの場合:

prePopulate: JSON.parse(populateValue)
43
Rory McCrossan

文字列を配列として使用している場合、このエラーが発生する場合があります。 ajaxからjsonを取得し、結果を解析するのを忘れて、その結果を配列として使用しているとしましょう。 jsonを使用する前に解析するための救済策は上記のとおりです。

2
Skywalker

サーバー側のコードは、WebMethodを記述した.CSページを意味し、常に.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のpostメソッドで:

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