.NET (ApiController) / jQuery .ajax:从 POST 返回什么?

gla*_*con 3 c# asp.net ajax jquery

在从 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); }
    });
},
Run Code Online (Sandbox Code Playgroud)

我读过这个:Ajax 请求返回 200 OK,但是触发了一个错误事件而不是成功,这似乎涉及同一问题,但我怀疑它没有数据,因为它对我不起作用?

需要明确的是,我想做的就是返回一个没有数据的普通旧 2xx。

Bey*_*ers 5

根据文档

“json”:将响应评估为 JSON 并返回 JavaScript 对象。跨域“json”请求将转换为“jsonp”,除非请求在其请求选项中包含 jsonp: false。JSON数据经过严格解析;任何格式错误的 JSON 都会被拒绝并引发解析错误。从 jQuery 1.9 开始,空响应也会被拒绝;服务器应该返回 null 或 {} 响应。

因此,如果您想使用 jQuery ajax,则必须返回有效的 json 字符串,只需在 API 控制器中使用以下内容:

return Ok(new {});

请注意,这是一个 jQuery ajax“功能”,例如使用 Angular 来执行 ajax post,我可以return Ok();在控制器中使用,一切都按预期工作。