EDIT2 : 솔루션 발견, 문제는 아약스 호출에서 매개 변수로 서버 측에서의 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"}
은 다음 아약스 호출이 실행되지 않습니다, 그리고 데이터 매개 변수가 유효한 값이없는 것처럼 보인다. data
이 유효한 JSON이있는 문자열 리터럴과 같게 설정되면 아무런 문제가 없습니다. ajax 호출에서 자바 스크립트 객체를 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>
을 그리고 이것은 해당 아약스 호출 게시물 뒤에 C# 코드에서 방법 : 내 영문 파일에 아래의 코드를 참조하십시오 흥미롭게
[System.Web.Services.WebMethod]
public static string GetCurrentTime(string name)
{
return "Hello ";
}
, 나는 data: JSON.stringify({ array })
을 변경할 수 있어요 아약스 호출에서 임의의 JSON을 문자열 리터럴로 호출하면 정상적으로 작동합니다. 그러나 stringify를 사용하면 ajax 호출의 "성공"콜백 메소드가 실행되지 않습니다. 이견있는 사람? 당신이 JSON.stringify()
를 호출 할 때
이유는 두 번째 캐릭터 라인 화 통화 중괄호가있다? 이것들은 필요 없다고 생각합니다. – ne1410s
'{array}'는'{array : array}'의 ES6 속기입니다. 그래서 JSON은 배열을 JSON 객체의''array "'속성에 가질 것입니다. 그것은 컨트롤러가 기대하는 것입니까? – Barmar