0

我正在实现 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 调用立即执行“成功”函数(如果我将“reload()”调用留在代码中,这会使我的窗口重新加载在一个戏剧性的循环中)。我需要 /webservice.php 调用中的 PHP 会话 ID,因此我将 PHPSESSIONID cookie 传递给页面。

我清除了我的 Firefox 缓存。我关闭了浏览器,将 'sFoolCache' 变量添加到 url(而不是帖子),但它也不起作用。我迷路了。

4

3 回答 3

1

看起来传递 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 querystring',
             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); 
             }
        });
}
于 2014-09-16T11:45:58.553 回答
0

所以,感谢@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); 
        });
}

请投票给 Michal 的答案(在这里),而不是这个 ;-) 谢谢大家。

于 2014-09-16T12:26:22.273 回答
0

因为它在这种情况下似乎有帮助,所以我取消了这个答案

在这里查看:http: //api.jquery.com/jquery.ajax/

弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调自 jQuery 1.8 起已弃用。要为最终删除准备代码,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

改用这个:

$.ajax(/* ... */)
.done(function(data) { /* ... */ })
.failure(function(data) { /* ... */ });
于 2014-09-16T11:38:10.683 回答