Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.08.2013, 11:24
Новичок на форуме
Отправить личное сообщение для kuznecovo4ka Посмотреть профиль Найти все сообщения от kuznecovo4ka
 
Регистрация: 13.08.2013
Сообщений: 9

Присвоение PHP-переменных сессии через Ajax-запрос
Суть в том, что с текущей страницы отправляется ajax-запрос к другой странице, на которой присваивается переменная $_SESSION, она никуда там не выводится и т.д., просто присваивается значение. В качестве обработки ajax-ответа я хочу вывести эту переменную на текущей странице без перезагрузки, но она не выводится. После обновления страницы все ок. Вопрос: то, что я пытаюсь сделать, вообще возможно?
Ответить с цитированием
  #2 (permalink)  
Старый 13.08.2013, 14:02
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

с особенностями сессий в пхп не знаком, но если покажете код, посмотреть могу.
Ответить с цитированием
  #3 (permalink)  
Старый 13.08.2013, 14:06
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от kuznecovo4ka
Вопрос: то, что я пытаюсь сделать, вообще возможно?
конечно, просто не забывайте открывать сессию и при изменении данных в нем, сохранять сессию или закрывать(что тоже приводит к сохранению)

если с открытием сессии все у вас ок, просто вконце работы PHP вызывайте метод session_write_close(); и все должно быть гуд
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 13.08.2013, 14:36
Новичок на форуме
Отправить личное сообщение для kuznecovo4ka Посмотреть профиль Найти все сообщения от kuznecovo4ka
 
Регистрация: 13.08.2013
Сообщений: 9

Сообщение от devote Посмотреть сообщение
вконце работы PHP вызывайте метод session_write_close();
спасибо! помогло
Ответить с цитированием
  #5 (permalink)  
Старый 13.08.2013, 14:39
Новичок на форуме
Отправить личное сообщение для kuznecovo4ka Посмотреть профиль Найти все сообщения от kuznecovo4ka
 
Регистрация: 13.08.2013
Сообщений: 9

еще такой вопрос: как правильно вызывать js-функцию обновления документа? ни document.reload() ни document.refresh() не дают никакой реакции вообще. и можно ли обновить только часть страницы (например div с инклудом другой страницы)?
Ответить с цитированием
  #6 (permalink)  
Старый 13.08.2013, 15:58
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

location.reload();
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #7 (permalink)  
Старый 14.08.2013, 13:33
Новичок на форуме
Отправить личное сообщение для kuznecovo4ka Посмотреть профиль Найти все сообщения от kuznecovo4ka
 
Регистрация: 13.08.2013
Сообщений: 9

блин,что-то опять не работает с сессиями((
видимо вчера выводилось то, что уже было записано в $_SESSION до этого.
вот код страницы, на которой вызывается ajax-запрос и в которую нужно вывести переменную сессии:
<? 
session_start();
class Client {
	public $name;
	public $tel;
	public $skidka;
	public $code;
	public $kolvoObr;
	public $sum;
	}
?>
<script language="javascript" type="text/javascript">
var request = null;
function createRequest() {
	try {
		request = new XMLHttpRequest();
		} catch (trymicrosoft) {
			try {
				request = new ActiveXObject("Msxm12.XMLHTTP");
				} catch (othermicrosoft) {
					try {
						request = new ActiveXObject("Microsoft.XMLHTTP");
						} catch (failed) {
							request = null;
							}
					}
			}
	if (request == null)
		alert("Error creating request object!");
}
function hide() {
	document.getElementById("resAuthCl").innerHTML = "";
}
function auth(f) {
	createRequest();
	var txt = f.elements["searchWord"].value;
	if (txt == "") {document.getElementById("resAuthCl").innerHTML = "Задан пустой запрос"; }
	else {
	var elemsRadio = f.elements["authValue"];
	var i, elem;
	for (i=0; i<elemsRadio.length; ++i) {
		if (elemsRadio[i].checked == true) {
		elem = elemsRadio[i];
		break; }
	}
	var data = "txt="+txt+"&type="+elem.value;
	var url = "other/forAuthClient.php?"+data;
	request.open("GET", url, true);
	request.onreadystatechange = upd;
	request.send(null); 
	}
}
function upd() {
	if (request.readyState == 4) {
	var result = request.responseText;
	if (result == "Запись найдена") {
	document.getElementById("resAuthCl").innerHTML = "Имя клиента: "+"<? echo $_SESSION['client']->name.'<br />'; ?>"+"Телефон: "+"<? echo $_SESSION['client']->tel.'<br />'; ?>"+"<input id='postAndHide' type='button' value='Да, всё верно' onclick='hide();'/>";
	}
	else {
		document.getElementById("resAuthCl").innerHTML = "Запись не найдена";
	}
	}
}
</script>
<body>
<div id="top"></div>
<form name="form1">
<input onkeydown="if (event.keyCode == 13) {auth(this.form); return false;}" id="searchWord" type="text" autofocus="autofocus" />
<input name="authValue" type="radio" value="tel" />по номеру 
<input name="authValue" type="radio" value="code" checked />по Карте клиента
<input id="poisk" type="button" value="Найти" onclick="auth(this.form);"/>
</form>
<div id="resAuthCl"></div>
<? session_write_close(); ?>
</body>



а вот код обработки ajax-запроса:
<? 
session_start();
header("Content-Type: text/html; charset=WINDOWS-1251");
class Client {
	public $name;
	public $tel;
	public $skidka;
	public $code;
	public $kolvoObr;
	public $sum;
	}
function clientAuth($text, $pole){
	include('../block/db.php');
	$res = mysql_query("select * from clients where $pole='$text'", $db);
	$numrows = mysql_num_rows($res);
	if ($numrows>'0') {
		$myrow = mysql_fetch_array($res);
		$_SESSION['client'] = new Client();
		$_SESSION['client']->name = $myrow['name'];
		$_SESSION['client']->tel = $myrow['tel'];
		$_SESSION['client']->skidka = $myrow['skidka'];
		$_SESSION['client']->code = $myrow['code'];
		$_SESSION['client']->kolvoObr = $myrow['kolvo_obr'];
		$_SESSION['client']->sum = $myrow['sum'];
		session_write_close();
		return true;
		}
		else {
			return false;
			}
		return;
	}
if (isset($_GET['txt']) and isset($_GET['type'])) {
	$text = $_GET['txt'];
	$pole = $_GET['type'];
	$fl = clientAuth($text, $pole);
	
	if($fl) {
		echo "Запись найдена";
		}
	else echo "Запись не найдена";

}
?>
Ответить с цитированием
  #8 (permalink)  
Старый 14.08.2013, 15:36
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

какой же ужас у вас создан. И плюс с проблемами безопасности.


<script type="text/javascript">
function hide() {
    document.getElementById("resAuthCl").innerHTML = "";
}
function auth(f) {
    var txt = f.elements["searchWord"].value;
    if (txt == "") {
        document.getElementById("resAuthCl").innerHTML = "Задан пустой запрос";
    } else {
        var elemsRadio = f.elements["authValue"];
        var i, elem;
        for (i=0; i<elemsRadio.length; ++i) {
            if (elemsRadio[i].checked == true) {
                elem = elemsRadio[i];
                break;
            }
        }
        var data = "txt="+txt+"&type="+elem.value;
        var url = "other/forAuthClient.php?"+data;
        var request = new XMLHttpRequest();
        request.open("GET", url, true);
        request.onreadystatechange = function() {
            if (this.readyState == 4) {
                if (this.status >= 200 && this.status < 300 || this.status === 304) {
                    var perhapsJSON = null;
                    try {
                        if (window.JSON && JSON.parse) {
                            perhapsJSON = JSON.parse(this.responseText);
                        } else {
                            perhapsJSON = (new Function("return " + this.responseText))();
                        }
                    } catch(_e_) {}
                    if (perhapsJSON && perhapsJSON.found) {
                        document.getElementById("resAuthCl").innerHTML = 'Имя клиента: ' +
                            perhapsJSON.name + '<br />Телефон: ' + perhapsJSON.tel + '<br />' +
                            '<input id="postAndHide" type="button" value="Да, всё верно" onclick="hide();"/>';
                    } else {
                        document.getElementById("resAuthCl").innerHTML = "Запись не найдена";
                    }

                }
            }
        };
        request.send(null); 
    }
}
</script>
<body>
  <div id="top"></div>
  <form name="form1">
    <input onkeydown="if (event.keyCode == 13) {auth(this.form); return false;}" id="searchWord" type="text" autofocus="autofocus" />
    <input name="authValue" type="radio" value="tel" />по номеру 
    <input name="authValue" type="radio" value="code" checked />по Карте клиента
    <input id="poisk" type="button" value="Найти" onclick="auth(this.form);"/>
  </form>
  <div id="resAuthCl"></div>
</body>


<?php
header("Content-Type: text/html; charset=WINDOWS-1251");

function clientAuth($text, $pole){
    include('../block/db.php');
    $res = mysql_query("select * from clients where $pole='" . mysql_real_escape_string($text) ."'", $db);
    $numrows = mysql_num_rows($res);
    if ($numrows > 0) {
        $myrow = mysql_fetch_array($res);
        return array(
            'found' => true,
            'name' => $myrow['name'],
            'tel' => $myrow['tel'],
            'skidka' => $myrow['skidka'],
            'code' => $myrow['code'],
            'kolvoObr' => $myrow['kolvo_obr'],
            'sum' => $myrow['sum'],
        );
    }
    return array('found' => false);
}
if (isset($_GET['txt'], $_GET['type'])) {
    $text = $_GET['txt'];

    $fl = array('found' => false);

    session_start();

    if ($_GET['type'] == 'tel') {
        $fl = clientAuth($text, 'tel'); // в целях безопасности делать лучше так
    } else if ($_GET['type'] == 'code') {
        $fl = clientAuth($text, 'code'); // в целях безопасности делать лучше так
    }

    $_SESSION['auth'] = $fl;

    session_write_close();

    echo json_encode($fl);
}
?>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 14.08.2013 в 16:13.
Ответить с цитированием
  #9 (permalink)  
Старый 14.08.2013, 16:02
Новичок на форуме
Отправить личное сообщение для kuznecovo4ka Посмотреть профиль Найти все сообщения от kuznecovo4ka
 
Регистрация: 13.08.2013
Сообщений: 9

devote, про ужас,это может быть,я только учусь))
в Вашем коде в первом файле на 32 строке у меня dreamweaver подсвечивает как ошибку
на странице теперь совсем ничего не выводится и даже после перезагрузки
Ответить с цитированием
  #10 (permalink)  
Старый 14.08.2013, 16:09
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

да, там ошибка, скобочку забыл.. добавил
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax запрос на ютуб masterdle Элементы интерфейса 2 16.07.2013 15:32
Передача HTML кода на сервер через Ajax KomaLex AJAX и COMET 2 06.12.2012 15:28
Синхронный запрос данных по AJAX Shasoft AJAX и COMET 2 03.03.2009 14:07
Проблема с обработкой селектов html кода, пришедшего через ajax запрос Rage jQuery 6 26.01.2009 14:15
ajax запрос с подгружемным js HelpeR AJAX и COMET 1 27.10.2008 12:44