MVC方法调用在Fiddler中工作,但不在浏览器中

时间:2014-05-02 17:52:28

标签: c# javascript jquery ajax asp.net-mvc

我可以使用以下语法从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;
            }
        }

2 个答案:

答案 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);
                            }
                        });