.NET (ApiController) / jQuery .ajax : what to return from POST?
在从ApiController派生的Controller中的Post方法中,我应该返回什么来指示jQuery成功?
我已经尝试过HttpResponseMessage但是jQuery认为这是一个错误(即使jQuery错误处理程序的参数明显具有200状态)。
jQuery看起来像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | processParticipantEvent: function(parID, evtType, evtNotes, successFunction, errorFunction){ debugger; var requestURL = '/api/participantevent'; var json = {"parId" : parID,"evtType": evtType,"evtNotes": evtNotes}; var jsonArray=JSON.stringify(json); $.ajax({ type:"POST", contentType:"application/json; charset=utf-8", url: requestURL, data: jsonArray , dataType:"json", success: function (data) { successFunction(data); }, error: function (data) { errorFunction(data); } }); }, |
我已经读过这个:Ajax请求返回200 OK,但是错误事件被触发而不是成功,这似乎触及了同样的问题,但我怀疑它是数据不合理,因为它对我不起作用?
为了清楚起见,我想做的就是返回一个没有数据的普通旧2xx。
根据文件:
"json": Evaluates the response as JSON and returns a JavaScript
object. Cross-domain"json" requests are converted to"jsonp" unless
the request includes jsonp: false in its request options. The JSON
data is parsed in a strict manner; any malformed JSON is rejected and
a parse error is thrown. As of jQuery 1.9, an empty response is also
rejected; the server should return a response of null or {} instead.
因此,如果你想使用jQuery ajax,你必须返回一个有效的json字符串,只需在你的API控制器中使用以下内容:
注意这是一个jQuery ajax"功能",使用Angular例如做一个ajax帖子我可以在我的控制器中使用
正如@Beyers所提到的那样,使用OK()返回正常。
我在这里创建了相同的结构并且工作了。
我的控制器有这个:
1 2 3 4 5 | [Route("api/participantevent")] public IHttpActionResult Test() { return Ok(""); } |
在客户端我改变了你的功能只是为了简化:
1 2 3 4 5 6 7 8 9 10 11 12 13 | processParticipantEvent= function(){ debugger; var requestURL = '/api/participantevent'; $.ajax({ type:"POST", contentType:"application/json; charset=utf-8", url: requestURL, data: [{'test': '1'}] , dataType:"json", success: function (data) { alert('success'); }, error: function (data) { alert('error'); } }); } |
我通常会声明一个类如下:
公共类AjaxResult
{
1 2 3 4 5 6 7 8 9 10 | private bool success = true; private List<string> messages; public bool Success { get { return success; } set { success = value; } } public List<string> Messages { get { return messages; } } public AjaxResult() { messages = new List<string>(); } |
}
在控制器中,动作(向其发出ajax请求)应该具有JsonResult作为返回类型。
1 2 3 4 5 6 7 8 9 | [HttpPost] public JsonResult Action(string id) { AjaxResult result = new AjaxResult(); //Set the properties of result here... result.Success = true; result.messages.Add("Success"); return Json(result); } |
3.你的ajax电话会是这样的:
1 2 3 4 5 6 7 8 | $.ajax({ type:"POST", dataType: 'json', url: /ControllerName/Action, data: { id:"Test"}, success: function (data) { alert('success'); }, error: function (data) { alert('error'); } }); |
看来如果你得到一个OK响应,它可能不是一个有效的JSON。
我建议您检查浏览器中的HTTP响应,并尝试使用responseText运行JSON.parse函数,看看它是否失败。
您的错误是
1 | var requestURL = './api/participantevent'; |