簡體   English   中英

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

[英].NET (ApiController) / jQuery .ajax : what to return from POST?

在從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請求返回200 OK,但是引發了一個錯誤事件而不是成功 ,這似乎在涉及同一問題,但是我懷疑它沒有數據了,因為它對我不起作用?

為了清楚起見,我要做的就是返回一個沒有數據的普通舊2xx。

根據文檔

“ 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(); 在我的控制器內部,一切正常。

正如@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'); }
    });
}

您的錯誤與requestURL 其值為絕對值,並且http://api/participantevent不存在。 嘗試使用相對值。

var requestURL = './api/participantevent';

看來,如果您獲得OK響應,則可能不是有效的JSON。 我建議您在瀏覽器中檢查HTTP響應,並嘗試使用responseText運行JSON.parse函數,看看它是否失敗。

  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,您的ajax調用將如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM