최근 프로젝트에서는 도메인을 넘어 다른 프로젝트의 데이터를 호출해야 하는데, 다른 프로젝트에서도 EasyUI의 DataGrid 컴포넌트를 사용합니다. 처음에는 DataGrid의 url 속성을 다른 프로젝트의 URL 주소로 직접 정의하면 충분할 것이라고 생각했습니다. 테스트 후 실제로 json 데이터가 반환되는 것을 확인했습니다. 그러나 json 데이터에서 "잘못된 레이블" 오류가 발생했습니다. 오류에 대한 해결 방법을 온라인에서 검색하여 "Json Invalid Label Error Solution" 방법을 참조했습니다. json을 로드하고 변환하는 datagrid의 loadData 메서드는 여전히 위의 오류를 표시합니다. 형식 문제가 없습니다.
"JavaScript 크로스 도메인 액세스 문제 해결"이라는 기사를 검색해 보니 easyUI는 JQuery의 비동기 방식을 사용하여 데이터를 로드하고 JQuery의 크로스 도메인 액세스 규칙, 즉 jsoncallback을 따라야 하기 때문이라는 것을 알게 되었습니다. = 위 기사에 언급된 URL에 추가해야 합니까? 콜백 함수 매개변수와 반환되는 json의 형식을 다음과 같이 수정해야 합니다. 콜백 함수 이름(json 데이터), 이제 반환되는 데이터는 콜백 함수 이름이 없는 json 형식의 데이터만 되어 자연스럽게 형식 오류가 발생하므로 ASP.NET MVC auto 정의된 JsonResult 클래스를 수정했습니다. 사용자 정의 JsonResult 클래스를 작성하는 방법에 대한 자세한 내용은 ASP.NET MVC JsonResult 직렬화 결과 사용자 정의,
코드는 다음과 같습니다.
public class CustomJsonResult:JsonResult
{
공개 재정의 void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
HttpResponseBase 응답 = context.HttpContext.Response;
if ( !String.IsNullOrEmpty(ContentType))
{
response.ContentType = ContentType;
}
else
{
response.ContentType = "application/json";
}
if (ContentEncoding != null)
{
response.ContentEncoding = ContentEncoding;
}
if (Data != null)
{
#pragma warning 비활성화 0618
//도메인 간 호출은 json 형식 jsoncallback을 수정해야 합니다.
if (context.HttpContext.Request.Params.AllKeys.Contains("jsoncallback") ))
{
String callback = context.HttpContext.Request.Params["jsoncallback"]
response.Write(callback "(" JsonConvert.SerializeObject(Data) ")"); }
else
{
response.Write(JsonConvert.SerializeObject(Data))
}
#pragma warning Restore 0618
}
}
}
EasyUI의 데이터그리드 코드는 다음과 같습니다.
//datagrid
$('#dg').datagrid( {
url:'http://localhost:9000/ManagementSystem/ListCurrent?department=sss&jsoncallback=?',
pageNumber: 1,
pageSize: 20,
pageList: [20, 40, 60, 80, 100],
onDblClickRow: function(rowIndex) {
edit(); }
});
저자: mikel
출처: http://www.cnblogs.com/micel/