我可以使用以下语法从Fiddler中的方法调用中获取结果:
http://localhost:1196/Home/GetSpecificFuelTicketAsync/6460194
请注意,通过Fiddler,我的控制器断点被击中,我可以看到它返回一个来自该方法的值。
但是,从浏览器运行时,我无法获得结果。当它试图执行ajax方法时,"成功"功能不会触发并跳到"错误"功能说它无法找到记录。
我的ajax调用出了什么问题?在我的ajax调用中,我肯定做错了。我在调试过程中验证了变量" ticketNbr"实际上包含一个值。
这是我的ajax电话:
$.ajax({
url: "Home/GetSpecificFuelTicketAsync",
data: "{id:" + ticketNbr + "}",
type: "POST",
dataType: "json",
success: function (data) {
DisplayReceipt(data);
},
error: function () {
alert("No record found for ticket " + ticketNbr);
}
});
这是我的Route.config文件:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
这是我的控制器方法:
[HttpPost]
public async Task<JsonResult> GetSpecificFuelTicketAsync(int id)
{
try
{
string imageID = await db.GetSpecificFuelTicketAsync(id);
return Json(imageID, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
strRemedyTktResponse = IssueRemedyTicket("Class: FuelTktController" + CrLf + "Method: GetSpecificFuelTicket" + CrLf + "Error: " + ex.Message + CrLf + "InnerException: " + ex.InnerException + CrLf + "Source: " + ex.Source + CrLf + "StackTrace: " + ex.StackTrace);
LogMessage.WriteEventLog("Class: FuelTktController" + CrLf + "Method: GetSpecificFuelTicket" + CrLf + "Error: " + ex.Message + CrLf + "InnerException: " + ex.InnerException + CrLf + "Source: " + ex.Source + CrLf + "StackTrace: " + ex.StackTrace, "FuelTktController", 1, strRemedyTktResponse);
return null;
}
}
答案 0 :(得分:3)
我认为这可能只是你定义ajax调用的方式..试试这个
$.ajax({
url: '@Url.Action("GetSpecificFuelTicketAsync")',
data: "{'id': '" + ticketNbr + "'}",
type: "POST",
contentType: 'application/json; charset=utf-8',
success: function (data) {
DisplayReceipt(data);
},
error: function () {
alert("No record found for ticket " + ticketNbr);
}
});
答案 1 :(得分:1)
更改此行 -
data: "{id:" + ticketNbr + "}",
到此 -
data: "id=" + ticketNbr,
或者这个 -
data : {id: ticketNbr} //loose the quotations.
再试一次。
使用这种控制器方法,下一个是更好的选择 -
$.ajax({
url: "Home/GetSpecificFuelTicketAsync/" + ticketNbr,
type: "POST",
dataType: "json",
success: function (data) {
DisplayReceipt(data);
},
error: function () {
alert("No record found for ticket " + ticketNbr);
}
});