2016-08-29 2 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

Привет, Ясень, спасибо, что ответ! В машине разработки он возвращает массив responseJSON правильно, а также reponseText с json-строкой, но когда он вызывается с удаленной машины, объект responseJSON не существует, возвращает null, а responseText содержит только сообщение «Bad request», поскольку я подписал код статуса ответа как 400. Я отредактировал вопрос с изображением результата ... –

+0

У вас есть ошибки в консоли? Это имеет какое-то отношение к CORS? Что-нибудь в консоли вроде «Access-Control -Origin ....» – Developer

ответ

5

У меня были вроде того же вопроса. При тестировании на локальной машине с использованием localhost, ResponseJSON заполняется. Когда я загрузить свой проект на тестовом сервер и тестирование, мой responseJSON неопределенен и responseTEXT просто давая statusdescription, что я послал:
(это 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))); 

который дал мне кучу ошибок.

Я попытался с JsonResult использовать следующий код, который РАБОТАЕТ локально (но у меня была синтаксическая ошибка в JSON), но не работала на тестовом сервере.

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

Это последнее испытание (выше), когда я использовал запрос AJAX представить форму модели к контроллеру MVC. Я читал, что это происходит из-за того, что он перекрестный домен, но это не имеет смысла.

Я создал веб-контроллер API и разместил там информацию о методе. Это потому, что я хотел использовать HttpReponseMessage, и я понял, что это тип WebAPI. Получив модель и json и все, чтобы работать вместе, я протестировал и угадал, что?

Когда я использую HttpResponseMessage в качестве возвращаемого типа в WebAPI и вернуться, как это:

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 с использованием Request.TrySkipIisCustomerErrors = true; работал с ActionResult на контроллере MVC, возвращая Json (Serializing model errors, AllowGet); – nebulous

+0

Да! Он работает как очаровательный ... Спасибо большое, ребята, спасли мне жизнь! –

Смежные вопросы