Сессии Php и Ajax - PullRequest
       3

Сессии Php и Ajax

0 голосов
/ 20 января 2012

В моем файле 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>

my 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'];
}
 ?>

Прямо сейчас выход всегда равен 1, когда я нажимаю кнопку, вызывающую функцию AJAX.

Любая помощь приветствуется.

Код в реальном времени: здесь

Спасибо всем за помощь. Одна проблема вниз, появляется новая проблема.

Расширенная функциональность:

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>';
    }    
}

Проблема заключается в том, что я нажимаю кнопку один раз в мой сайт

, и он увеличивается и показывает новый контент. Я нажимаю снова, и он возвращается к 0. Если я нажимаю кнопку несколько раз быстро, кажется, это работает. Похоже, что Chrome имеет эту проблему, а Firefox нет.

Ответы [ 4 ]

2 голосов
/ 20 января 2012

Добавить session_start(); в blogFunction.php

0 голосов
/ 20 января 2012

Я думаю, что сначала вы должны сбросить $_SESSION['views'], а затем написать снова.

function blogreturn(){
  $temp = $_SESSION['views'];
  unset($_SESSION['views']);
  $_SESSION['views'] = $temp + 1;
  echo "THIS number is:" .$_SESSION['views'];
}
0 голосов
/ 20 января 2012

Вот правильно работающий код ... 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'];
}
?>

Обратите внимание, что я не включаю blogFunction.php в файле index.php!Это важно.

В другом случае вы устанавливали переменную на 0 каждый раз, когда загружалась страница, как было вызвано функцией (если вы использовали консоль для ее вызова).

Я добавил кнопку, чтобы вы могли нажимать кнопку для вызова функции через Ajax (в соответствии с вашими условиями в исходном вопросе).

Надеюсь, это поможет!

0 голосов
/ 20 января 2012

Вам необходимо вызвать session_start () в вашем файле blogFunction.php.Он должен вызываться перед любым выводом в браузер.Вероятно, лучшим вариантом было бы сначала вызвать его в сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...