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

时间:2015-09-13 21:46:57

标签: c# jquery asp.net ajax

在从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。

5 个答案:

答案 0 :(得分:4)

根据documentation

  

“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)

  1. 我通常会声明一个类如下:

    公共类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>();
    }
    

    }

  2. 在控制器中,动作(向其发出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. 3.你的ajax电话会是这样的:

        $.ajax({
            type: "POST",
            dataType: 'json',
            url: /ControllerName/Action,
            data: { id: "Test"},
            success: function (data) { alert('success'); },
            error: function (data) { alert('error'); }
       });