2012-01-20 2 views
0

В моем файле index.php у меня есть функция AJAX, которая вызовет функцию в другом php-файле, которая должна увеличивать число и возвращать его всякий раз, когда я вызываю функцию AJAX.Php Sessions и Ajax

Проблема в том, что число никогда не меняется. Я пробовал много разных вещей. Слишком много, чтобы перечислить их всех, к сожалению.

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

Сейчас выход всегда '1', когда я нажал на кнопку, которая вызывает функцию 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. Если я нажимаю кнопку несколько раз быстро, это, похоже, работает. Кажется, что хром испытывает эту проблему, в то время как Firefox - нет.

+0

Почему вы используете методы ванильной DOM для вывода результата AJAX вместо jQuery? '$ ('# blog'). text (output);' –

ответ

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

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

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

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

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

+0

Это помогло. Я добавил дополнительные функции функции blogreturn, которая вызывала у меня дальнейшие проблемы. Если вы можете помочь, я был бы благодарен. –

+0

Вы должны очистить свой код, чтобы избавиться от mucky-muck. Библиотека jQuery вызывается там по крайней мере три раза, что я мог видеть, версии 1.3, 1.3.2 и 1.4. Когда я подключаю ваш новый blogFunction() к моей тестовой странице, он отлично работает (пока не закончится запись в блоге). Мне кажется, что в php есть что-то ужасное, что вы не разместили. – Tim

+0

Да, я согласен, много пробовал за последние несколько дней. Много кода осталось позади. Теперь я добавил весь файл. –

2

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

+3

Предпочтительно в начале скрипта;) – Polynomial

+0

Спасибо. Это решило мою первоначальную проблему, с тех пор возникла новая проблема. –

0

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

-3

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

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

Почему, что бы это сделать? – afuzzyllama

+0

Это ничего не делало, к сожалению. –