EDIT2:解決策を見つけ、問題はAJAX呼び出しのパラメータは、サーバ側のWebMethod属性に送信されていないことになってしまっJSON, AJAX, and ASP.NETJSON文字列化がアレイ上で動作しない(ASP.NET)
参照してください。文字列。 ajax呼び出しのデータフィールドのJSON文字列は、WebMethodのパラメータで指定されたオブジェクトタイプに実際に変換されます。つまり、私の問題は、データが文字列としてWebMethodに渡されず、別のオブジェクト型に渡されていたことでした。
EDIT:Chromeのブラウザコンソールを見ると、次のエラーが表示されます。リソースの読み込みに失敗しました:サーバーがステータス500(内部サーバーエラー)で応答しました。より深いで掘り、私は次の応答があります
{"Message":"Type \u0027System.Collections.Generic.IDictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]\u0027 is not supported for deserialization of an array.","StackTrace":" at System.Web.Script.Serialization.ObjectConverter.ConvertListToObject(IList list, Type type, JavaScriptSerializer serializer, Boolean throwOnError, IList\u0026 convertedList)\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object\u0026 convertedObject)\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object\u0026 convertedObject)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}
は、以下のAJAX呼び出しが実行されることはありませんが、データパラメータが有効な値を持っていないように思えます。 data
が有効なJSONを持つ文字列リテラルと等しく設定されている場合は問題ありません。 ajax呼び出しでjavascriptオブジェクトをdata
の有効なパラメータに変換する際の問題があるようです。
<script type="text/javascript">
$(document).ready((function() {
$('#mytable tr').click(function (event) {
var array = [];
$(".tdval").each(function() {
array.push({
value: $(this).html()
});
});
alert(JSON.stringify(array)); //produces what appears to be valid json after calling stringify: [{"value":"val1"},{"value":"val2"}]
$.ajax({
type: "POST",
url: "schedule.aspx/GetCurrentTime",
data: JSON.stringify({ array }), //this seems to be the issue
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response){
alert(response.d + "lol");
},
complete: function() {
alert("complete");
}
});
});
}));
</script>
そして、これは、AJAX呼び出しの記事その背後にあるC#コード内のメソッドである:私のaspxファイルに以下のコードを参照してください
興味深いことに[System.Web.Services.WebMethod]
public static string GetCurrentTime(string name)
{
return "Hello ";
}
、私はdata: JSON.stringify({ array })
を変更することができますよ文字列リテラルとしていくつかのランダムjsonへのajax呼び出しで、それは正常に動作するはずです。しかし、stringifyを使うと、ajax呼び出しからの "成功"コールバックメソッドは決して実行されません。何かご意見は?
はなぜ二文字列化の呼び出しで中括弧があるのですか?これらは必要ではないと考えています。 – ne1410s
'{array}'は '{array:array}'の略語です。したがって、JSONは配列をJSONオブジェクトの '' array "'プロパティに入れます。それはコントローラーが期待していることですか? – Barmar