Stack Exchange MiniProfiler не показывает окно профиля? - PullRequest
4 голосов
/ 26 августа 2011

Я установил Stack Exchange MiniProfiler, и View Source показывает, что он отображает ожидаемый 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();
    }

enter image description here

РЕДАКТИРОВАТЬ: Благодаря вкладу Сэма я отследил проблему с помощью моего метода .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;
        }
    }
});

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Полагаю, что глобальный dataFilter взаимодействует с $.get() MiniProfiler для файлов шаблонов jQuery Templates.Вызов JSON.parse() для фрагмента HTML определенно приведет к ошибке.

Поскольку вы используете последнюю версию jQuery, оптимизированный синтаксический анализ JSON не нужно добавлять вручную.Эта функциональность была включена в ядро ​​jQuery в версии 1.4.

Итак, проще всего, попробуйте изменить глобальный dataFilter на:

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

Если это не помогает, вы можете захотетьпосмотрите на конвертеры jQuery 1.5 вместо глобального dataFilter, который позволяет применять операцию, подобную dataFilter, к ответам определенного Content-Type.Вот несколько хороших примеров от парня, который на самом деле переписал jQuery 1.5 AJAX: http://encosia.com/jquery-1-5s-ajax-rewrite-and-asp-net-services-all-is-well/#comments

2 голосов
/ 28 августа 2011

Это имеет смысл, возможно, ваш фильтр искажает результаты.

Добавление условия, которое обходит фильтрацию, если вы видите, что это результат JSON от MiniProfiler, должно исправить это.

...