Я пытаюсь передать настраиваемый заголовок ответа, чтобы уведомить мой 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/
Если вы посмотрите на события / обратные вызовы, у них есть глобальная завершенность, так что, возможно, этоЯ нуждаюсь.Хотя понятия не имею, как его запустить.