選択ボックスを置き換えるためにselect2ライブラリを使用しています。Select2 ライブラリページにある例 7 を並べ替えました(ID などで下にスクロールし
$("#e7").select2
ます)。シリアル化された json データを返す独自の汎用ハンドラーを作成しました。
GetData.asxh ビュー : パブリック クラス GetData : IHttpHandler { public bool IsReusable { get { return false; } }
public class RecipesList
{
public int total { get; set; }
public List<TopRecipeTable> recipes { get; set; }
public RecipesList() { }
public RecipesList(int total, List<TopRecipeTable> recipes)
{
this.total = total;
this.recipes = recipes;
}
}
private string GenerateJsonSerializedObject(int languageId, string orderBy)
{
RecipesList recipeList = new RecipesList(15, DBDataBase.GetTopRecipesByNumberOfRecipes(languageId, 15));
return new JavaScriptSerializer().Serialize(recipeList);
}
public void ProcessRequest(HttpContext context)
{
int languageId;
bool languageParsed = int.TryParse(context.Request["languageId"], out languageId);
string orderBy = (string)context.Request["orderBy"];
if (languageParsed && orderBy != string.Empty)
{enter code here
context.Response.ContentType = "application/json";
var jsonValue = GenerateJsonSerializedObject(languageId, orderBy);
context.Response.Write(jsonValue);
}
}
このジェネリック ハンドラーは、正しい形式の json を返します (この URLで確認しました)。私の結果(json)も上記のページの例と同じです。しかし、この後jqueryはもう起動しません。
私のスクリプト:
$(document).ready(function () {
$("#e8").select2({
placeholder: "Search for a recipe",
//minimumInputLength: 1,
ajax: {
url: "/Handlers/GetData.ashx",
dataType: 'jsonp',
data: function (term, page) {
return {
languageId: 1,
orderBy: "TA"
};
},
results: function (data, page) {
alert(data.total);
var more = (page * 10) < data.total; // whether or not there are more results available
// notice we return the value of more so Select2 knows if more results can be loaded
return { results: data.recipes, more: more };
}
},
formatResult: movieFormatResult, // omitted for brevity, see the source of this page
formatSelection: movieFormatSelection, // omitted for brevity, see the source of this page
dropdownCssClass: "bigdrop", // apply css that makes the dropdown taller
escapeMarkup: function (m) { return m; } // we do not want to escape markup since we are displaying html in results
});
});
元の例で同じことを書こうとしalert(data.total)
ましたが、うまくいきましたが、私のバージョンではうまくいきませんでした。したがって、正しいjson形式があり、jqueryは汎用ハンドラーを呼び出し、パラメーターlanguageIdも受け取りました...また、正しいjson形式を返しますが、何も返しません。ここで何かが欠けているかどうかはわかりません。これは、汎用ハンドラーでも機能する可能性があると確信しているためです。私の問題について十分な情報を提供したことを願っています。
I can also add my result in jquery .ajax error handler :
xhr.status = 200
ajaxOptions = parsererror
horwnError = SyntaxError : invalid label
If this is any helpful information