2016-08-29 39 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对象在从本地主机调用时起作用,但当远程计算机发起调用时不起作用,它返回时未定义... 有人能帮助我吗? 在此先感谢!

enter image description here

+0

你用'jqXHR'取回了什么? – Jasen

+0

嗨Jasen,谢谢你的回复!在开发机器中,它正确地返回一个responseJSON数组和一个带有json字符串的reponseText,但是当它从远程机器调用时,responseJSON对象不存在,返回null,并且responseText仅包含“Bad request message”因为我已经将响应状态代码签名为400.我用结果图片编辑了问题... –

+0

控制台中有任何错误吗?它与CORS有什么关系?任何东西在控制台像“访问控制-Origin ....” – Developer

回答

5

我一直有某种相同的问题。 当使用本地主机在本地机器上测试时,会填充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))); 

这给了我一堆错误。

我试着用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控制器时的最近一次测试(上图)。我读到这是因为它跨域,但没有任何意义。

我创建了一个web 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;在MVC控制器上使用ActionResult返回Json(序列化模型错误,AllowGet); – nebulous

+0

是啊!它就像一个迷人的...感谢很多家伙,拯救了我的生活! –

相关问题