[英].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函數,看看它是否失敗。
我通常會像下面這樣聲明一個類:
公共類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'); }
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.