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

.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控制器中使用以下内容:

return Ok(new {});

注意这是一个jQuery ajax"功能",使用Angular例如做一个ajax帖子我可以在我的控制器中使用return Ok();,一切都按预期工作。


正如@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函数,看看它是否失败。


    您的错误是requestURL。它的值是绝对值,http://api/participantevent不存在。尝试使用相对值。

    1
    var requestURL = './api/participantevent';