JQuery AJAX завершена не получить пользовательский заголовок ответа? - PullRequest
1 голос
/ 03 июля 2010

Я пытаюсь передать настраиваемый заголовок ответа, чтобы уведомить мой JavaScript, истекший пользователем.Это хорошо работает, когда дело доходит до использования его с диалоговыми окнами jquery ui.

У меня есть это

$.ajaxSetup
({
    complete: function (event, xhr, options)
    {

        if (event.getResponseHeader('X-LOGON') === 'LogOn')
        {

            window.location.href = "redirect to signin";
        }
    }

});

Так что это должно выполняться после каждого jjery ajax-запроса, и это так.

Теперь у меня есть что-то подобное для моего диалога

  $.manageAjax.add('NonCachedAjaxRequests',
    {
        type: "GET",
        url: 'ajaxRequestPath',
        success: function (result)
        {
            $('#Dialog').html(result).dialog(
            {
                width: 580,
                height: 410,
                resizable: false,
                modal: true,
                buttons:
                {
                    Cancel: function ()
                    {
                        $(this).dialog('close');
                    },
                    'Create': function ()
                    {
                        // create;   
                    }
                },
                close: function ()
                {
                    //destroy
                }
            });


        }
    });

    return false;

});

Я использую то, что называется ajax manager http://www.protofunc.com/scripts/jquery/ajaxManager/, это просто помогает остановить двойные щелчки и тому подобное и использует все те же методычто $ .ajax будет использовать.

Так что теперь, когда я смотрю на запрос, возвращающийся, чтобы заполнить вышеприведенное диалоговое окно, я вижу это в firebug

Response Headersview source
Server  ASP.NET Development Server/10.0.0.0
Date    Fri, 02 Jul 2010 22:12:36 GMT
X-AspNet-Version    4.0.30319
X-AspNetMvc-Version 2.0
X-LOGON LogOn
Cache-Control   private
Content-Type    text/html; charset=utf-8
Content-Length  6468
Connection  Close

Обратите внимание, как он говорит "X-LOGON ", но когда дело доходит до моего ajaxSetup и доходит до

if (event.getResponseHeader('X-LOGON') === 'LogOn')

, оно всегда говорит, что оно пустое, но, как вы можете ясно видеть, firebug говорит иначе.Я не понимаю, что происходит.

Edit

Хорошо, похоже, проблема с менеджером ajax.Я действительно хочу продолжать использовать это или кое-что сопоставимое, поскольку это действительно помогает с остановкой дублирующих запросов.

Я обнаружил, что ему не нравятся глобальные ajaxSetups. Я не знаю, почему он просто не любит их.Вместо этого я начал пытаться использовать коды состояния, поэтому поэкспериментировал с «403» и обнаружил это.

, если запрос ajax 403 завершен, и вы используете ajaxSetup с complete и ajaxmanager, он все равно попытается перейти всообщение об успехе один.

Если перед успешным завершением поставить ajax complete (он не работает, если complete - после успеха) и возвращается с 403, то у менеджера ajax не возникает проблем с обработкой и нажатием на complete.

Так что я не уверен, что делать.Я хочу использовать ajaxmanager или что-то в этом роде, и я хочу использовать ajaxSetup.

Поэтому я не знаю, могу ли я иметь оба в данный момент.

Редактировать 2

Когда я использую коды состояния и ajaxSetup с менеджером ajax, я получаю эту ошибку

ошибка: статус: 403 |URL: / MyURL http://localhost:3086/Plugins/AjaxManager/Source/jquery.ajaxmanager.js Строка 44

 error: function(ahr, status){
36 var opts = this;
37 if(status && status.indexOf('error') != -1){
38 setTimeout(function(){
39 var errStr = status +': ';
40 if(ahr.status){
41 errStr += 'status: '+ ahr.status +' | ';
42 }
43 errStr += 'URL: '+ opts.url;
44 throw new Error(errStr);
45 }, 1);
46 }
47 }, 

, поэтому я не знаю, является ли это еще одной причиной, по которой я получаю ошибку.

Редактировать 4

Похоже, я использовал версию, которая, по-видимому, не совместима с версией 1.4 (не уверен, почему она работала)

В любом случае, я использую 3.0, теперь она все еще не работает, но у нее есть некоторые новыеопции, которые я хотел бы попробовать, но понятия не имею, как их использовать.

http://www.protofunc.com/scripts/jquery/ajaxManager3/

Если вы посмотрите на события / обратные вызовы, у них есть глобальная завершенность, так что, возможно, этоЯ нуждаюсь.Хотя понятия не имею, как его запустить.

1 Ответ

1 голос
/ 03 июля 2010

исходный код manageAjax доступен здесь: http://www.protofunc.com/scripts/jquery/ajaxManager/jquery.ajaxmanager.js

Глобальная функция jquery 'complete' отправляется через эти строки:

if (opts.global) {
    $.event.trigger("ajaxComplete", args);
}

Это создает новый объект Event в«муху», поэтому она удаляет все данные, которые могут быть у вас в исходном событии.

Я могу ошибаться, но после быстрого чтения кода заголовки теряются на ранних этапах manageAjax, и я не уверен, что вы сможете это сделатьчто вы хотите при использовании этой библиотеки, пока библиотека не будет исправлена, чтобы позволить это.

Так что комментарий Роберто кажется хорошим советом: попробуйте его без manageAjax, и он, скорее всего, будет работать

Я надеюсь, что этовам поможет,

Джером Вагнер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...