Php Sessions和Ajax

时间:2012-01-20 15:51:48

标签: php ajax session

在我的index.php文件中,我有一个AJAX函数,它将在另一个php文件中调用一个函数,该文件应该递增一个数字并在我调用AJAX函数时返回它。

问题是这个数字永远不会改变。我尝试了很多不同的东西。很遗憾,列出它们太多了。

我的index.php文件。

<?php
     session_start();
     $_SESSION['views'] = 0;
 ?>
 <?php include 'blogFunction.php';?>

 <script type="text/javascript">
 function doSomething()
 {
    $.ajax({ url: '/blogFunction.php',
     data: {action: 'test'},
     type: 'post',
     success: function(output) {
     document.getElementById("blog").innerHTML = '';
              document.getElementById("blog").innerHTML = output;
                 }
   });
  }
 </script>

 <div class ="blog" id = "blog"></div>

我的blogFunction.php

<?php 
      if(isset($_POST['action']) && !empty($_POST['action'])) {
         $action = $_POST['action'];
         switch($action) {
            case 'test' :  blogreturn();break;
         }
      }

function blogreturn(){

      $_SESSION['views'] = $_SESSION['views']+ 1;
      echo "THIS number is:" .$_SESSION['views'];
}
 ?>

现在每当我点击调用AJAX函数的按钮时,输出总是为'。'

任何帮助表示感谢。

直播代码:here

到目前为止,谢谢大家的帮助。一个问题是,出现了一个新问题。

扩展功能:

session_start();
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];

switch($action) {
    case 'test' :  blogreturn();break;
}

}

function blogreturn(){  
    $request_url = "http://retrovate.tumblr.com/api/read?type=posts";
    $xml = simplexml_load_file($request_url);

    $a = $_SESSION['views'];
    $b = $_SESSION['views'] +4;
    echo "A = ".$a;
    echo "B = ".$b;
    $_SESSION['views'] = $_SESSION['views']+ 1;
    for ($i = $a; $i <= $b; $i=$i+1) {
            echo '<h2>'.$xml->posts->post[$i]->{'regular-title'}.'</h2>';
            echo '<br>';
            echo $xml->posts->post[$i]->{'regular-body'};
            echo '<br>';
            echo '<br>';
    }    
}

这里的问题是,我在my site

点击我的按钮一次

并递增并显示新内容。我再次点击它又恢复为0.如果我快速点击按钮很多次,它似乎工作。看起来Chrome有这个问题而Firefox不是。

4 个答案:

答案 0 :(得分:2)

session_start();添加到blogFunction.php

答案 1 :(得分:0)

您需要在blogFunction.php文件中调用session_start()。必须在向浏览器输出任何内容之前调用它。可能最好的情况是在脚本中首先调用它。

答案 2 :(得分:0)

这是正常运行的代码...... 的index.php

<?php 
 session_start();
 $_SESSION['views'] = 0;
 ?>
<!doctype html>
<html>
    <head>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js" />
    <body>
        <div class ="blog" id = "blog"></div>
        <input type="button" value="Add to the count!" id="call_ajax"/>
        <script type="text/javascript">
            $('#call_ajax').click(function () {
                $.ajax({ url: '/blogFunction.php',
                    data: {action: 'test'},
                    type: 'post',
                    success: function(output) {
                        document.getElementById("blog").innerHTML = '';
                        document.getElementById("blog").innerHTML = output;
                    }
                });
            });
        </script>
</body>

blogFunction.php

<?php
session_start();
  if(isset($_POST['action']) && !empty($_POST['action'])) {
     $action = $_POST['action'];
     switch($action) {
        case 'test' :  blogreturn();break;
     }
  }

function blogreturn(){
  $_SESSION['views'] = $_SESSION['views']+ 1;
  echo "THIS number is:" .$_SESSION['views'];
}
?>

请注意,我没有在index.php文件中包含blogFunction.php!这很重要。

你拥有它的另一种方式是,每次加载页面时都将变量设置为0,这就是调用函数的方式(如果你使用控制台调用它)。

我添加了一个按钮供您点击通过Ajax调用该功能(根据原始问题中的条件)。

希望有所帮助!

答案 3 :(得分:-3)

我认为你应该首先取消设置$_SESSION['views']而不是再写一次。

function blogreturn(){
  $temp = $_SESSION['views'];
  unset($_SESSION['views']);
  $_SESSION['views'] = $temp + 1;
  echo "THIS number is:" .$_SESSION['views'];
}