Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Передать параметры скроллинга на сервер
 
 автор: Владимир55   (20.04.2008 в 20:08)   письмо автору
 
 

Задача: передать на сервер параметр, связанный с вертикальным скроллингом.

Для макетирования созданы две страницы.

Первая страница имеет код

</head>
<body onscroll="func()" > 
<script> 
function func() 

var scry=document.body.scrollTop*1;
document.write('<img style="display:none;" src="scroll.php?top='+scry+'">'); 

</script> 

<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
</body>


А вторая страница с именем scroll.php имеет такой код:

            $top = $_GET['top'];

            $adr = "scroll/" . $top . ".txt" ;

            $file = fopen ($adr, "w") ;
            fputs ($file, $top) ;
            fclose ($file) ;


По идее, при перемещении ползунка вертикальной прокрутки первой страницы должен запускаться файл scroll.php, код которого создаст в папке scroll некий текстовый файл, имя которого отразит перемещение ползунка.

Но на практике схема работает лишь частично: при трогании ползунка прокрутки первой страницы исчезает вся выводимая этой страницей информация (цифры 0-9), а также сам "градусник". При этом всякий раз формируется текстовый файл с именем 4.txt

Как бы заставить работать эту конструкцию?

   
 
 автор: Владимир55   (20.04.2008 в 20:56)   письмо автору
 
   для: Владимир55   (20.04.2008 в 20:08)
 

Похоже, что причина в скрипте.

Для простоты я закомментировал вообще весь код в файле scroll.php, но при трогании ползунка все равно весь выводимый текст исчезает и остается только чистая страница даже без "градусника"!

   
 
 автор: Апельсин   (20.04.2008 в 21:11)   письмо автору
 
   для: Владимир55   (20.04.2008 в 20:56)
 

Здравствуйте, Владимир55!

Проблема в том, что метод document.write() после завершения документа переписывает его заново. Воспользуйтесь свойством .innerHTML, а лучше воспользуйтесь любой готовой javascript библиотекой для реализации этого с помощью ajax.

   
 
 автор: Владимир55   (20.04.2008 в 23:07)   письмо автору
 
   для: Апельсин   (20.04.2008 в 21:11)
 

Это для меня чрезвычайно сложно...
Более доступными средствами это нельзя осуществить?

   
 
 автор: Drago   (21.04.2008 в 02:36)   письмо автору
 
   для: Владимир55   (20.04.2008 в 23:07)
 

можно заранее создать картинку и просто изменять ей атрибут src.

document.getElementById('img_id').src = 'scroll.php?top=' + scry;

   
 
 автор: Владимир55   (21.04.2008 в 10:38)   письмо автору
 
   для: Drago   (21.04.2008 в 02:36)
 

Полностью код должен выглядеть так?

<body onscroll="func()" >  
<script>  
function func()  
{  
var scry=document.body.scrollTop*1; 
document.getElementById('img_id').src = 'scroll.php?top=' + scry;   
}  
</script> 

В этом случае функционирование html файла при перемещении ползунка прокрутки не нарушается.

Но... не вызывается файл scroll.php !

   
 
 автор: Апельсин   (21.04.2008 в 10:41)   письмо автору
 
   для: Владимир55   (21.04.2008 в 10:38)
 

Не забудьте
<img id = "img_id" >

   
 
 автор: Владимир55   (21.04.2008 в 10:57)   письмо автору
 
   для: Апельсин   (21.04.2008 в 10:41)
 

То есть, полностью код должен выглядеть так?

</head>

<body onscroll="func()" >  
<img id = "img_id" >
<script>  
function func()  
{  
var scry=document.body.scrollTop*1; 
document.getElementById('img_id').src = 'scroll.php?top=' + scry;   
}  
</script>  


В этом случае система функционирует. Но:
1. вверху страницы выводится квадратик, отражающий отсутствующую картинку. Может, его можно чем-то заменить? Реальной картиночкой крошечного размера? Как это вписать?
2. прокрутка двигается как-то рывками. Вероятно, это связано с быстродействием сервера, и тут уже едва ли можно что то улучшить.
3. рождается множество файлов с именами от 0 до 1192. (разрешение экрана 800х600). А что должно быть исходя из природы скроллинга?

   
 
 автор: Drago   (21.04.2008 в 12:40)   письмо автору
 
   для: Владимир55   (21.04.2008 в 10:38)
 

-

   
 
 автор: Владимир55   (21.04.2008 в 13:00)   письмо автору
 
   для: Drago   (21.04.2008 в 12:40)
 

Что?

   
 
 автор: Lelik   (21.04.2008 в 09:11)   письмо автору
 
   для: Владимир55   (20.04.2008 в 23:07)
 

попробуйте так

<div id="scroll_param"></div>
<script> 
function func() 

var oBody = (document.body) ? document.body : document.documentElement;
var scrollY = (oBody.scrollTop) ? oBody.scrollTop: window.pageYOffset;
document.getElementById('scroll_param').innerHTML = '<img style="display:none;" src="scroll.php?top='+scrollY +'">'; 

</script>  


токо при XHTML-ом доктайпе это (в смысле определение прокрутки) не работает в ИЕ :-/

   
 
 автор: Владимир55   (21.04.2008 в 10:44)   письмо автору
 
   для: Lelik   (21.04.2008 в 09:11)
 

Я использую обычный html файл (точнее, файл с расширением htm). И приведенный Вами, Lelik, код не нарушает его работу при движении ползунка. Но не вызывается файл scroll.php!

Причем проблема именно в том, что файл не вызывается, а не в отсутсвии GET параметра; для контроля этого обстоятельства я принудительно установил в файле scroll.php $top = 5 что бы он создал текстовой файл в любом случае, когда его откроют.

Как бы это исправить?

   
 
 автор: Lelik   (21.04.2008 в 11:00)   письмо автору
 
   для: Владимир55   (21.04.2008 в 10:44)
 

попробуйте так, ибо приведенный выше код вставляет HTML как текст

<div id="scroll_param"></div>
<script> 
function func() { 
    var oBody = (document.body) ? document.body : document.documentElement;
    var scrollY = (oBody.scrollTop) ? oBody.scrollTop: window.pageYOffset;
    
    var oContainer = document.getElementById('scroll_param');
    var oImg = document.createElement("IMG");
    oImg.setAttribute('src', 'scroll.php?top='+scrollY);
    oContainer.appendChild(oImg);

</script>   

   
 
 автор: Владимир55   (21.04.2008 в 11:15)   письмо автору
 
   для: Lelik   (21.04.2008 в 11:00)
 

Нет, почему то и так файл scroll.php не вызывается...

   
 
 автор: Lelik   (21.04.2008 в 12:11)   письмо автору
 
   для: Владимир55   (21.04.2008 в 11:15)
 

тогда вам может с помощью аякса передавать ему значения? в аттаче библиотека jQuery, чтоб по сети не искать.

function func() { 
    var oBody = (document.body) ? document.body : document.documentElement;
    var scrollY = (oBody.scrollTop) ? oBody.scrollTop: window.pageYOffset;
    
    var sUrl = 'scroll.php';
    $.get(
        sUrl,
        {
            top: scrollY //сюда можно передавать любое количество параметорв :)
        },
        OnAddParam // если необходимо, чтоб по ответу серверного скрипта сработала функция, то это будет она
    )
}

function OnAddParam(sData){
    alert(sData);
}

   
 
 автор: Владимир55   (21.04.2008 в 12:32)   письмо автору
 
   для: Lelik   (21.04.2008 в 12:11)
 

Приложение после скачивания имеет имя 52490-20080421121152.js Вероятно, это искажения, внесенные Форумом.

Вы не могли бы продублировать его в архивном виде?

   
 
 автор: Lelik   (21.04.2008 в 17:51)   письмо автору
 
   для: Владимир55   (21.04.2008 в 12:32)
 

надо просто вставить джаваскриптовый файл

<script type="text/javascript" src="jquery.js"></script>

   
 
 автор: Владимир55   (21.04.2008 в 18:27)   письмо автору
 
   для: Lelik   (21.04.2008 в 17:51)
 

Файл jquery.js положил в корень сайта, где и находится тестовая страница, а полный код на
той странице имеет вид:

<body> 

<script type="text/javascript" src="jquery.js"></script>

function func() {  
    var oBody = (document.body) ? document.body : document.documentElement; 
    var scrollY = (oBody.scrollTop) ? oBody.scrollTop: window.pageYOffset; 
     
    var sUrl = 'scroll.php'; 
    $.get( 
        sUrl, 
        { 
            top: scrollY //сюда можно передавать любое количество параметорв :) 
        }, 
        OnAddParam // если необходимо, чтоб по ответу серверного скрипта сработала функция, то это будет она 
    ) 


function OnAddParam(sData){ 
    alert(sData); 



При запуске страницы она выводит вот это:

function func() { var oBody = (document.body) ? document.body : document.documentElement; var scrollY = (oBody.scrollTop) ? oBody.scrollTop: window.pageYOffset; var sUrl = 'scroll.php'; $.get( sUrl, { top: scrollY //сюда можно передавать любое количество параметорв :) }, OnAddParam // если необходимо, чтоб по ответу серверного скрипта сработала функция, то это будет она ) } function OnAddParam(sData){ alert(sData); }

Файл scroll.php не запускается.

Очень хотелось бы увидеть весь предлагаемый Вами код вцелом, поскольку самостоятельно собрать его из кусочков я вряд ли смогу.

   
 
 автор: Lelik   (21.04.2008 в 19:47)   письмо автору
 
   для: Владимир55   (21.04.2008 в 18:27)
 

забыл сказать про файл, которому jQuery аяксом передает данные:

header('Content-type: text/html; charset=utf-8');
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
{
print_r($_GET);
}

   
 
 автор: Владимир55   (21.04.2008 в 20:25)   письмо автору
 
   для: Lelik   (21.04.2008 в 19:47)
 

Что-то я совсем уже запутался...

1. Вы говорите о каком-то еще новом файле? Или о коде файла scroll.php?

2. Каким бы ни был код принимающего файла, как я уже написал выше, этот файл не вызывается, и при запуске html файла выводится вот такое сообщение:

function func() { var oBody = (document.body) ? document.body : document.documentElement; var scrollY = (oBody.scrollTop) ? oBody.scrollTop: window.pageYOffset; var sUrl = 'scroll.php'; $.get( sUrl, { top: scrollY //сюда можно передавать любое количество параметорв :) }, OnAddParam // если необходимо, чтоб по ответу серверного скрипта сработала функция, то это будет она ) } function OnAddParam(sData){ alert(sData); }

   
 
 автор: Lelik   (21.04.2008 в 20:50)   письмо автору
 
   для: Владимир55   (21.04.2008 в 20:25)
 

1. о scroll.php
2. давайте код посмотреть, как там оно у вас

   
 
 автор: AlexSol   (21.04.2008 в 21:42)   письмо автору
 
   для: Владимир55   (21.04.2008 в 20:25)
 

<script type="text/javascript" src="jquery.js"></script>
<script >
function func() {
var oBody = (document.body) ? document.body : document.documentElement;
var scrollY = (oBody.scrollTop) ? oBody.scrollTop: window.pageYOffset;

var sUrl = 'scroll.php';
$.get(
sUrl,
{
top: scrollY //сюда можно передавать любое количество параметорв :)
},
OnAddParam // если необходимо, чтоб по ответу серверного скрипта сработала функция, то это будет она
)
}

function OnAddParam(sData){
alert(sData);
}
</script >

   
 
 автор: Владимир55   (23.04.2008 в 15:50)   письмо автору
 
   для: AlexSol   (21.04.2008 в 21:42)
 

Поскольку несмотря на все усилия, по прежнему ничего не работает, а приведу полностью коды обоих файлов.

Файл html содержит:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Проба</title>
</head>
<body> 

<script type="text/javascript" src="jquery.js"></script> 
<script >
function func() { 
var oBody = (document.body) ? document.body : document.documentElement; 
var scrollY = (oBody.scrollTop) ? oBody.scrollTop: window.pageYOffset; 

var sUrl = 'scroll.php'; 
$.get( 
sUrl, 

top: scrollY //сюда можно передавать любое количество параметорв :) 
}, 
OnAddParam // если необходимо, чтоб по ответу серверного скрипта сработала функция, то это будет она 



function OnAddParam(sData){ 
alert(sData); 

</script >


<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
</body>

</html>



Файл рнр содержит:

<?php
// СКРИПТ КОНТРОЛЯ ПЕРЕМЕЩЕНИЯ ДВИЖКА СКРОЛЛИНГА


    
header('Content-type: text/html; charset=utf-8');
    
header("Cache-Control: no-store, no-cache, must-revalidate");
    
header("Cache-Control: post-check=0, pre-check=0"false);

    if(
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
    {
        
$top 5// Для настройки
            
$adr "scroll/" $top ".txt" ;

            
$file fopen ($adr"w") ;
            
fputs ($file$top) ;
            
fclose ($file) ;

    }


?>



При этом html файл воспроизводить колонку цифр и при перемещении движка не "залипает", т.е. записанный в нем скрипт не мешает обычному воспроизведению текста. Но файл scroll.php не запускается и ничего не записывает.

Что же здесь не так?

   
 
 автор: Lelik   (23.04.2008 в 19:26)   письмо автору
 
   для: Владимир55   (23.04.2008 в 15:50)
 

ну канешно! а что же вы хотели :) ?! чтоб начал исполняться файл scroll.php вам надо при каком-то событии вызывать функцию func()
пример

<body onload="func();">

   
 
 автор: Владимир55   (24.04.2008 в 00:02)   письмо автору
 
   для: Lelik   (23.04.2008 в 19:26)
 

Какая то нерешаемая задача!

Поверите ли, в июле того года неделю сочиняли этот скрипт (на другом форуме), но дело так и кончилось ничем... Как-то все расплывается на множество уточняющих деталей, а конкретный работоспособный код создать так и не удается!

   
 
 автор: Lelik   (24.04.2008 в 00:43)   письмо автору
 
   для: Владимир55   (24.04.2008 в 00:02)
 

я сделал так, у меня запись в файл пошла

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Проба</title>

<script type="text/javascript" src="jquery.js"></script> 
<script >
function func() { 
var oBody = (document.body) ? document.body : document.documentElement; 
var scrollY = (oBody.scrollTop) ? oBody.scrollTop: window.pageYOffset; 

var sUrl = 'scroll.php'; 
$.get( 
sUrl, 

top: scrollY //сюда можно передавать любое количество параметорв :) 
}

}
</script >
</head>
<body onload="func()"> 


<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>0</p>
</body>

</html> 


и scroll.php

<?php
// СКРИПТ КОНТРОЛЯ ПЕРЕМЕЩЕНИЯ ДВИЖКА СКРОЛЛИНГА


    
header('Content-type: text/html; charset=utf-8');
    
header("Cache-Control: no-store, no-cache, must-revalidate");
    
header("Cache-Control: post-check=0, pre-check=0"false);

    if(
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
    {
        
$top 7// Для настройки
        
$adr $top ".txt" ;
        
        
$file fopen ($adr"w") ;
        
fputs ($file$top) ;
        
fclose ($file) ;

    }


?> 

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования