【问题标题】:jQuery ajax call doesn't call my php pagejQuery ajax 调用不调用我的 php 页面
【发布时间】:2014-09-16 11:30:24
【问题描述】:

我正在实施 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(而不是帖子),但它也不起作用。 我迷路了。

【问题讨论】:

  • 我的猜测是您的 webservice.php 不在顶级目录中。如果在浏览器中输入 http:///webservice.php 会得到什么响应?
  • 此外,successerror 和此类属性在 jQuery 1.8 中已弃用。请改用$.ajax().done(function(data) { /* ... */ })。检查here了解更多信息。
  • 我知道我的 webservice.php 网址很好,应该在我的问题中告诉你,谢谢安迪。 @Michal:呸!,blabla.done()。就做到了。太棒了!谢谢:-)

标签: php jquery ajax browser-cache persona


【解决方案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); 
             }
        });
}

【讨论】:

    【解决方案2】:

    由于它在这种情况下似乎有所帮助,我将取消删除此答案

    在这里查看: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) { /* ... */ });
    

    【讨论】:

    • 就是这样。这是我重写它以使其工作的方法:见下一篇文章,抱歉
    【解决方案3】:

    所以,感谢@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 的答案(在这里),而不是这个 ;-) 谢谢大家。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多