Я использую личную аутентификацию Mozilla (т.е. browserid).
Итак, у меня есть следующее onLogin ():
function onLogin(pAssertion) {
var sPHPSessionID = $.cookies.get("PHPSESSID")+'';
var sFoolCache = new Date().getTime() + '' + Math.random();
$.ajax(
{
cache: false,
type: 'POST',
url: '/webservice.php?id=personaauth&u=i',
data: { assertion: pAssertion, PHPSESSID: sPHPSessionID, z: sFoolCache },
success: function(res, status, xhr) { alert("do reload"); },
error: function(xhr, status, err) {
navigator.id.logout();
alert("Login failure: " + err);
}
});
}
Там, где есть «alert (« do reload »)», у меня обычно есть вызов window.location.reload ().
Проблема в том, что, несмотря на все мои попытки очистить и не использовать кеш браузера (Firefox), моя страница /webservice.php вообще не вызывается. Вызов ajax немедленно выполняет функцию «success» (которая держит перезагрузку моего окна в драматическом цикле, если я оставлю вызов «reload ()» в коде).
Мне нужен идентификатор сеанса PHP в моем вызове /webservice.php, поэтому я передаю файл cookie PHPSESSIONID на страницу.
Я очистил свой кеш Firefox. Я закрыл свой браузер, я добавил переменную ‘sFoolCache’ в URL (а не в пост), но он тоже не работал.
Я потерялся.
Похоже, что есть проблема с передачей URL, попробуйте передать полный URL:
function onLogin(pAssertion) {
var sPHPSessionID = $.cookies.get("PHPSESSID")+'';
var sFoolCache = new Date().getTime() + '' + Math.random();
$.ajax(
{
cache: false,
type: 'POST',
url: 'FullURL and QUuerystring',
data: { assertion: pAssertion, PHPSESSID: sPHPSessionID, z: sFoolCache },
success: function(res, status, xhr) { alert("do reload"); },
error: function(xhr, status, err) {
navigator.id.logout();
alert("Login failure: " + err);
}
});
}
Как оказалось, в этом случае я помогаю восстановить ответ
Проверьте здесь: http://api.jquery.com/jquery.ajax/
Примечание об устаревании: jqXHR.success (), jqXHR.error () и
Начиная с jQuery 1.8, обратные вызовы jqXHR.complete () устарели. Подготовить
Ваш код для их возможного удаления, используйте jqXHR.done (), jqXHR.fail (),
и jqXHR.always () вместо этого.
Используйте это вместо:
$.ajax(/* ... */)
.done(function(data) { /* ... */ })
.failure(function(data) { /* ... */ });
Итак, благодаря @Michal, вот как я переписал его, чтобы заставить его работать (кстати, я должен был ответить сам, так как мой комментарий был слишком длинным):
function onLogin(pAssertion) {
var sPHPSessionID = $.cookies.get("PHPSESSID")+'';
var sFoolCache = new Date().getTime() + '' + Math.random();
$.ajax(
{
cache: false,
type: 'POST',
url: '/webservice.php?id=personaauth&u=i',
data: { assertion: pAssertion, PHPSESSID: sPHPSessionID, z: sFoolCache }
}).done(function(res, status, xhr) {
window.location.reload();
}).fail( function(xhr, status, err) {
navigator.id.logout();
alert("Login failure: " + err);
});
}
Пожалуйста, проголосуйте за ответ Михала (здесь), а не этот 😉
Спасибо, парни.