4

我已经安装了 Stack Exchange MiniProfiler,查看源代码显示它正在呈现预期的 HTML。但是它没有显示角落里的小配置文件详细信息框 - 可能有什么问题?

<script src="/v2/Scripts/jquery-1.6.1.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="/v2/mini-profiler-includes.css?v=1.7.0.0">
<script type="text/javascript" src="/v2/mini-profiler-yepnope.1.0.1.js"></script>
<script type="text/javascript">
    yepnope([
        { test: window.jQuery, nope: '/v2/mini-profiler-jquery.1.6.1.js' },
        { test: window.jQuery && window.jQuery.tmpl, nope: '/v2/mini-profiler-jquery.tmpl.beta1.js' },
        { load: '/v2/mini-profiler-includes.js?v=1.7.0.0',
           complete: function() {
               jQuery(function() {
                   MiniProfiler.init({
                       ids: ["025bbb91-9605-44b7-b33d-d8b196326dbc","2c74ce3e-8de6-4f8d-920a-e8708b22231b"],
                       path: '/v2/',
                       version: '1.7.0.0',
                       renderPosition: 'left',
                       showTrivial: false,
                       showChildrenTime: false,
                       maxTracesToShow: 15
                   });
               });
         }
    }]);
</script>

在我的 Global.asax.cs 中:

    protected void Application_BeginRequest()
    {
        if (Request.IsLocal)
        {
            MiniProfiler.Start();
        }
    }

    protected void Application_EndRequest()
    {
        MiniProfiler.Stop();
    }

在此处输入图像描述

编辑:感谢 Sam 的输入,我已将问题跟踪到我的 .ajaxSetup() 方法。当它被注释掉时,配置文件框再次显示。但我不明白为什么这是一个问题:

$.ajaxSetup({
    data: "{}",
    dataFilter: function (data) {
        var msg;

        if (data == "") {
            msg = data;
        }
        else if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function') {
            msg = JSON.parse(data);
        }
        else {
            msg = eval('(' + data + ')');
        }

        if (msg.hasOwnProperty('d')) {
            return msg.d;
        }
        else {
            return msg;
        }
    }
});
4

2 回答 2

2

我的猜测是全局 dataFilter 干扰了 MiniProfiler 的$.get()jQuery 模板模板文件。调用JSON.parse()HTML 片段肯定会引发错误。

由于您使用的是最新版本的 jQuery,因此无需手动添加优化的 JSON 解析。该功能包含在 1.4 的 jQuery 核心中。

因此,最简单的是,尝试将您的全局 dataFilter 更改为:

$.ajaxSetup({
  data: "{}",
  dataFilter: function (msg) {
    if (msg.hasOwnProperty('d')) {
        return msg.d;
    }
    else {
        return msg;
    }
  }
});

如果这不能解决问题,您可能需要查看 jQuery 1.5 的转换器而不是全局 dataFilter,它允许您对特定 Content-Type 的响应应用类似于 dataFilter 的操作。来自实际执行 jQuery 1.5 AJAX 重写的人的一些很好的例子:http: //encosia.com/jquery-1-5s-ajax-rewrite-and-asp-net-services-all-is-well/#comments

于 2011-09-15T12:29:12.910 回答
2

这是有道理的,也许您的过滤器正在破坏结果。

如果您看到它是 MiniProfiler JSON 结果,则添加绕过过滤的条件应该可以修复它。

于 2011-08-28T00:54:36.730 回答