【问题标题】:Php Sessions and AjaxPHP 会话和 Ajax
【发布时间】:2012-01-20 15:51:48
【问题描述】:

在我的 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 函数的按钮时,输出始终为“1”。

任何帮助表示赞赏。

直播代码: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 没有。

【问题讨论】:

  • 你为什么使用 vanilla DOM 方法来输出 AJAX 而不是 jQuery 的结果? $('#blog').text(output);

标签: php ajax session


【解决方案1】:

session_start(); 添加到blogFunction.php

【讨论】:

  • 最好在脚本的开头 ;)
  • 谢谢。这解决了我最初的问题,后来又出现了新问题。
【解决方案2】:

这是正常工作的代码... 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 调用该函数(根据您在原始问题中的条件)。

希望有帮助!

【讨论】:

  • 这有帮助,谢谢。我在 blogreturn 函数中添加了更多功能,这给我带来了更多麻烦。如果您能提供帮助,我将不胜感激。
  • 你应该清理你的代码,以消除这些肮脏的东西。 jQuery 库在那里至少被调用了 3 次,我可以看到,版本 1.3、1.3.2 和 1.4。当我将你的新 blogFunction() 插入我的测试页面时,它工作正常(直到你的博客文章用完)。在我看来,您尚未发布的 php 中有一些错误。
  • 是的,我同意,最近几天尝试了很多事情。很多代码都被遗忘了。我现在已经添加了整个文件。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    我认为你应该先取消设置$_SESSION['views'],然后再写。

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

    【讨论】:

    • 不幸的是,这没有做任何事情。
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2011-08-03
    • 2011-01-07
    • 2010-12-17
    • 2012-10-20
    • 2016-10-20
    • 2015-08-18
    相关资源
    最近更新 更多