2016-08-29 12 views
4

을 반환하지 않습니다

$.ajax({ 
    type: 'POST', 
    url: '@Url.Action("Action", "Controller")', 
    data: { id: id }, 
    dataType: 'json', 
    async: true, 
    success: function (data) { 
    }, 
    error: function (jqXHR, status, err) { 
    var result = jqXHR.responseJSON; 
    } 
}); 

jqXHR.responseJSON 객체는 localhost에서 호출 할 때 작동하지만 원격 컴퓨터에서 호출 한 경우에는 정의되지 않은 상태로 반환됩니다 ... 누군가 나를 도울 수 있습니까? 미리 감사드립니다.

enter image description here

+0

대신에'jqXHR'에서 무엇을 얻을 수 있습니까? – Jasen

+0

안녕하세요 Jasen, 답장을 보내 주셔서 감사합니다! 개발 컴퓨터에서는 json 문자열을 사용하여 reponseText뿐만 아니라 responseJSON 배열을 올바르게 반환하지만 원격 컴퓨터에서 호출 될 때 responseJSON 객체가 없으며 null을 반환하고 responseText에는 "잘못된 요청 메시지"만 포함됩니다. 응답 상태 코드에 400으로 서명 했으므로 결과의 그림으로 질문을 편집했습니다 ... –

+0

콘솔에 오류가 있습니까? 그것은 CORS와 관련이 있습니까? "Access-Control -Origin ...."과 같은 콘솔의 모든 것 – Developer

답변

5

저도 같은 문제의 종류를 가지고있다. localhost를 사용하여 로컬 컴퓨터에서 테스트 할 때 ResponseJSON이 채워집니다. 내가 테스트 서버 테스트에 내 프로젝트를 업로드 내 responseJSON는 정의이고에서 responseText 그냥 내가 보낸 상태 설명주고있다 :
를 (이것은 JSONResult하지만 내가 ActionResult로했던)

Response.StatusCode = 400; 
Response.StatusDescription = "Bad Request - Model State is Invalid"; 
return Json(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)), JsonRequestBehavior.AllowGet); 

은하고 ActionResult를 위해 특별히 나는 또한 시도 :

return new HttpStatusCodeResult(400, new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors))); 

것은 나에게 오류의 무리를 준.

로컬로 작업했지만 (JSON에서 구문 오류가 있지만) 테스트 서버에서 작동하지 않는 다음 코드를 JsonResult와 시도했습니다.

return Json(new { success = false, responseJSON = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors)) }, JsonRequestBehavior.AllowGet); 

이 (위) 내가 MVC 컨트롤러에 양식 모델을 제출하는 AJAX 요청을 사용하는 경우 최근의 테스트입니다. 나는 그것이 크로스 도메인으로 가고 있기 때문에 그것이라고 읽었다. 그러나 그것은 의미가 없다.

웹 API 컨트롤러를 만들고 거기에 메서드 정보를 넣습니다. 이것은 HttpReponseMessage를 사용하고 싶었 기 때문에 WebAPI 유형이라고 생각했습니다. 모델과 json 및 모든 것을 함께 사용하면 테스트를 거쳐 무엇을 추측 할 수 있습니까?

내가 WebAPI의 반환 유형으로 HttpResponseMessage을 사용하여 다음과 같이 돌아 가면 :

return Request.CreateResponse(HttpStatusCode.BadRequest, new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ModelState.Values.SelectMany(v => v.Errors))); 

모두가 제대로 채우기 responseJSON과에서 responseText.

나는 그것이 다른 방식으로 작동하지 않는 이유를 알지 못합니다. 누군가 응답을 보내면 알려주세요.

첫 번째 방법으로 작업 했어야했기 때문에 나에게이 작업은 해결되었습니다.

UPDATE : MVC의 컨트롤러 - 원래 코드를 사용하고

Response.TrySkipIisCustomErrors = true; 

가 responseJSON 표시했다 덧붙였다.

+0

그래, 모두 이상해! 내가 솔루션을 mvc 프로젝트와 함께 작동하는지 확인해 보겠습니다 ... 감사합니다. –

+0

@JuniorSilva using Request.TrySkipIisCustomerErrors = true; Json을 반환하는 MVC 컨트롤러에서 ActionResult로 작업했습니다 (모델 오류 직렬화, AllowGet). – nebulous

+0

그래! 그것은 매력적으로 작동합니다 ... 고마워요 많은 사람들, 내 목숨을 구해 줬어! –