jQuery ajax调用不会在成功调用时将'data'返回到重定向页面

时间:2012-12-10 21:41:51

标签: jquery ajax

<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'页面上将'message'写入div#messageBox。 TY

3 个答案:

答案 0 :(得分:2)

基于@james emanon的回复,我能够得到更适合我的东西。他确实以一种很好的方式回答了我提出的问题,所以他得到了他的'checK'。我所做的是删除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&amp; P的人 - 这次我很感激!!! ...

答案 1 :(得分:1)

您必须在返回页面上执行此操作,而不是在当前页面上执行此操作。

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

答案 2 :(得分:1)

很抱歉,如果我不完全了解您的问题 - 但您在重定向之前控制日志,那么您可以从console.log中看到数据。然后重定向,并且数据在后续页面上消失。

#messageBox位于当前页面或重定向页面的哪个位置?

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

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

      '+ data +'
    ');

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

    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>