在从ApiController派生的Controller中的Post方法中,我应该返回什么来指示jQuery成功?
我已经尝试过HttpResponseMessage但jQuery认为这是一个错误(即使jQuery错误处理程序的参数明显具有200状态)。
jQuery看起来像这样:
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 request returns 200 OK, but an error event is fired instead of success这似乎触及了同一个问题,但我怀疑它是不是因为它不能为我工作?
要明确我要做的就是返回一个没有数据的普通旧2xx。
答案 0 :(得分:4)
“json”:将响应评估为JSON并返回JavaScript 宾语。除非,否则跨域“json”请求将转换为“jsonp” 请求在其请求选项中包含jsonp:false。 JSON 数据以严格的方式解析;任何格式错误的JSON都被拒绝了 抛出一个解析错误。 从jQuery 1.9开始,空响应也是如此 被拒绝;服务器应该返回null或{}的响应。
因此,如果你想使用jQuery ajax,你必须返回一个有效的json字符串,只需在你的API控制器中使用以下内容:
return Ok(new {});
注意这是一个jQuery ajax“功能”,例如使用Angular来做一个ajax帖子我可以在我的控制器中使用return Ok();
,一切都按预期工作。
答案 1 :(得分:2)
正如@Beyers所提到的,使用OK()返回只是有效。
我在这里创建了相同的结构并且工作了。
我的控制器有这个:
[Route("api/participantevent")]
public IHttpActionResult Test()
{
return Ok("");
}
在客户端我改变了你的功能只是为了简化:
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'); }
});
}
答案 2 :(得分:0)
您的错误是requestURL
。它的值是绝对的,http://api/participantevent
不存在。尝试使用相对值。
var requestURL = './api/participantevent';
答案 3 :(得分:0)
似乎如果你得到一个OK响应,它可能不是一个有效的JSON。 我建议您检查浏览器中的HTTP响应,并尝试使用responseText运行JSON.parse函数,看看它是否失败。
答案 4 :(得分:0)
我通常会声明一个类如下:
公共类AjaxResult
{
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作为返回类型。
[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电话会是这样的:
$.ajax({
type: "POST",
dataType: 'json',
url: /ControllerName/Action,
data: { id: "Test"},
success: function (data) { alert('success'); },
error: function (data) { alert('error'); }
});