为什么这个AJAX调用需要这么长时间?

时间:2012-08-13 01:01:45

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

这通常需要2-4秒,这对于它正在进行的工作来说似乎太长了。 这是AJAX:

$("#IngTable").html("<center><img src=../img/loading.gif /></center>");

    var search = document.getElementById("IngSearch").value;
    var apiLink = "/API/Ingredient/Search?search=" + search;
    $.ajaxSetup({ accepts: "application/json" });
    $.ajax({
        url: apiLink,
        type: "GET",
        success: function(data) {
            var ingredients = JSON.parse(data);
            var htmlIngred = "";
            for (var i = 0; i < ingredients.length; i++) {
                htmlIngred += "<tbody><td><span>" + ingredients[i].Name + "</span></td><td><a class='btn btn-success btn-mini' onclick='addIngred(" + ingredients[i].IngredientId + ");'>Add</a></td></tbody>";
            }
            document.getElementById("IngTable").innerHTML = htmlIngred;
        },
        error: function (a, b, c) { }
    });

这是Web API控制器:

    [HttpGet]
    public string IngredientSearch(string search)
    {
        var sw = Stopwatch.StartNew();
        var db = new Glubee.Model.GlubeeEntities();
        var results = db.Ingredients.Where(x => x.Name.Contains(search)).ToArray();
        sw.Stop();
        return JsonConvert.SerializeObject(results);
    }

配料表中只有16件,每件不超过20个字符。

有没有人知道问题可能在哪里,这需要花费这么长时间?

编辑:如果有帮助,这是我的Global.asax.cs页面:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

这是我的RouteConfig:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

1 个答案:

答案 0 :(得分:6)

你确切地知道什么是缓慢的吗?

例如;在您的IngredientSearch方法中,如果您从

更改代码
[HttpGet]
public string IngredientSearch(string search)
{
    var sw = Stopwatch.StartNew();
    var db = new Glubee.Model.GlubeeEntities();
    var results = db.Ingredients.Where(x => x.Name.Contains(search)).ToArray();
    sw.Stop();
    return JsonConvert.SerializeObject(results);
}

[HttpGet]
public string IngredientSearch(string search)
{
    return String.Empty;
}

还需要很长时间吗?

如果是这样;那么我们必须看一下脚本库问题;如果不是 - 那么你的数据库层是错误的。

这样的错误通常很难追查,所以你必须忘记假设并逐点测试。 上述改变消除了很多问题,因为很少的努力会给你一个很大的线索。

PS:对不起,我知道这不是答案;但我想把它作为一个发布,以便我可以清楚地突出代码更改;请不要投票!

相关问题