【问题标题】:jQuery ajax call not returning 'data' to redirected page on success calljQuery ajax 调用未在成功调用时将“数据”返回到重定向页面
【发布时间】:2012-12-10 21:41:51
【问题描述】:
<a href="PHP/LogOut.php" id="LogOut">Log Out</a>

链接 a#LogOut 调用一个 PHP 脚本,该脚本结束所有会话并以“您已注销”的数据进行响应。

<?php
    session_start();
    $_SESSION = array();
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}
session_destroy();
echo "You have logged out";
?>

一切正常,除了一旦您注销并返回登录页面,“数据/消息”就不会被写入页面。我怀疑这是由于'document.location.href'。如果我放置一个“console.log(data)”,它会在控制台中闪烁一秒钟,然后在加载返回页面时消失。如何让它运行脚本、重定向和显示消息?

$('a#LogOut').live('click',function(){
    $.ajax({
    type: "POST",
    url: $(this).attr('href'),
    success: function(data){
    var message = $(data).text();
    if (data==="You have logged out") {
    console.log( data );
    document.location.href='/returnedpage.php';
    $('#messageBox').show().html('<ul></li>' + data + '</li></ul>');

 } else {
    alert('not working');
 }
}
  });
  return false;
});

我可以使用 .load 函数重新加载内容,但这让我很生气,我想把它做好。基本上,我需要将“消息”写入“returnedpage.php”页面上的 div#messageBox。 TY

【问题讨论】:

  • 您根本无法重定向并期望数据仍然存在。一旦发生新的页面加载,所有数据都会丢失,保留它的唯一方法是将其存储在 cookie、本地存储、数据库中,或者将其作为 GET(查询字符串)或 POST 传递到下一页。既然你是用 ajax 来获取数据的,为什么不把数据存储在会话服务器端而不是返回它,然后在下一页检索它。

标签: jquery ajax


【解决方案1】:

根据@james emanon 的回复,我能够得到更适合我的东西。他确实很好地回答了我提出的问题,所以他得到了他的“检查”。我所做的是删除 ajax 调用并将 PHP 的最后几行更改为:

header ("Location: /FXCM/FXCM-Conversion.php?status=LO");
exit();

当我可以在服务器端执行时,我想为什么要让 jQuery 在 url 中附加一个参数。 然后在 JS 中我这样做了:

    var url = document.URL.split('status=')[1];
    if(url == undefined) {
        url = '';
    }
    if(url != ''){
        var message = 'You are logged out';
        $('#messageBox').show().removeClass('error').html('<ul><li>' + message + '</li></ul>');
    }

经过一番思考,我认为这是要走的路。非常感谢以上所有帮助我思考和学习的人,而不仅仅是 C&P - 这次我很感激!!!

【讨论】:

    【解决方案2】:

    抱歉,如果我没有完全理解您的问题 - 但是您在重定向之前控制台日志,因此您可以从 console.log 中看到 data。然后你被重定向并且 data 在后续页面上消失了。

    #messageBox 位于当前页面或重定向页面的什么位置?

    1. 如果在当前页面上,您可能希望在此之后放置重定向:

      $('#messageBox').show().html('

      • ' + 数据 + '');

      并为其添加一些延迟,以便用户可以在重定向之前看到消息。

      2 如果您想在重定向页面上发送消息,那么我的猜测是您必须在 url 末尾传递数据作为参数..

      document.location.href='/returnedpage.php?thisData=' + data;
      

      然后在重定向页面上,获取“thisData”的名称/值对,然后显示它。

      如果我对您的问题完全不满意,请道歉。

      要执行编号 #2 - 在后续页面上,您可以执行以下操作:

      *** caveat: this is JUST FOR THIS ONE USE CASE. I am assuming thisData is the ONLY param in the url. 
      

      在此页面中,只需执行此操作。

      <div id="messageBox" display="none"></div>
      
      <script>
      var url = document.URL;
      var dispData=url.split('thisData=')[1];
      $('#messageBox').show().html(dispData );
      </script>
      

      【讨论】:

      • 詹姆斯——成功了。关于如何“获取 'thisData' 的名称/值并显示它”的任何提示?
      • 用一个简单的解决方案更新了我的原始评论。请记住,此解决方案仅适用于此解决方案。如果您要传递多个名称/值对,那么您需要更强大的东西。这只是假设您有 ?thisData=data 等……就是这样,在 href 的末尾。如果它对您有用并且您使用它/接受它,请不要犹豫给我一个“检查”:-)
      • 其实它返回'undefined'
      【解决方案3】:

      你必须在返回的页面上做,而不是在当前页面上。

      要么通过查询字符串传入某些内容(例如 ?lo=1 表示已注销),要么使用特定的已注销页面,通过点击它,您知道您只有通过单击注销才能到达那里(例如 loggedout.php),或者设置一个临时cookie,在returnpage.php上读取它,用它来显示消息,并在一次性使用后删除cookie。这是我见过的三种方法。

      【讨论】:

      • 好人!谢谢你,我害怕那个!感谢您的指导!
      猜你喜欢
      • 1970-01-01
      • 2011-11-28
      • 2019-05-12
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      相关资源
      最近更新 更多