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'を検索することはできません
このエラーを修正するにはどうすればよいですか?
populateValue
変数の文字列をオブジェクトに解析する必要があります。
prePopulate: $.parseJSON(populateValue)
または、プレーンJSの場合:
prePopulate: JSON.parse(populateValue)
文字列を配列として使用している場合、このエラーが発生する場合があります。 ajaxからjsonを取得し、結果を解析するのを忘れて、その結果を配列として使用しているとしましょう。 jsonを使用する前に解析するための救済策は上記のとおりです。
サーバー側のコードは、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);
}
});
このエラーも発生していました。
シリアル化された辞書データを返すC#API。
return JsonConvert.SerializeObject(dic_data);
return new JavaScriptSerializer().Serialize(dic_data);
シリアル化しようとせずに辞書データを直接返すまで、このエラーメッセージを取得し続けました
return dic_data;
ブラウザ側でこれ以上のエラーはありません。理由はわかりません。