Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Вниз

Javascript + php, вопрос скорее по первому   Найти похожие ветки 

 
Zeqfreed ©   (2006-05-31 17:39) [0]

Приходится сейчас писать для веба. В результате моих изысканий я написал вот такой скриптик, иллюстрирующий мой подход к этому делу:

test.php:
<?
if (isset($_GET["get"])) {
 print "ShowText("hello");";
} else {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Тестовый скрипт</title>
<script>
function ShowText(text)
{
document.getElementById("a").value = unescape(text);
}

function AddScript(get)
{
var
 s = document.getElementsByTagName("script")[1];
 s.src = "test.php?get=" + get;
}
</script>
<script>
</script>
</head>
<body>
<form>
<textarea id="a" cols="70" rows="20"></textarea><br>
<input onClick="javascript: AddScript();" type="button" name="submit" value="Загрузить" />
</form>
</body>
</html>
<? } ?>


Данный скрипт работает. Но в реальном проекте такая же схема сбоит. Отсюда делаю вывод, что либо я опять где-то что-то недосмотрел, либо схема не очень-то и стабильная.
В общем задача у меня — динамическое обновление страницы без перезагрузки оной. А вопрос в том, как бы это все покорректней реализовать, т.к. чувствую, что сейчас у меня полная чушь написана.
Буду признателен за любые подсказки, только прошу меня не посылать изучать исходники AJAX Framework"ов.


 
Calm ©   (2006-05-31 17:57) [1]


> В общем задача у меня — динамическое обновление страницы
> без перезагрузки оной.

Что-то типа "взболтать, но не перемешивать". Надо бы пояснить.
Без разъяснений целей и проблем разгадывать исходник неохота, на работе таких ребусов хватает :)


 
Zeqfreed ©   (2006-05-31 18:01) [2]

Ну приведенный скрипт хорошо иллюстрирует мою задачу. При нажатии на кнопку в текстовое поле загружается текст, полученный в результате работы скрипта (в данном случае этого же, в общем случае — любого). Проблема заключается в том, как вызывается этот скрипт и получаются данные от него. Мне кажется, что сейчас это реализовано неверно. Спрашиваю, может кто подскажет более корректный вариант. Хотя сейчас я потестировал, вроде работает. Если предложений по улучшению не будет, придется оставить такой вариант.

Попутный вопрос, в php нет ф-ции аналогичной escape в javascript? (а я тем временем погляжу на php.net)


 
palva ©   (2006-05-31 18:38) [3]

Корректно реализуется через XML. Страница получает дополнительные данные в объект MSXML и рассовывает их по странице.


 
vidiv ©   (2006-06-01 03:16) [4]

можно делать скрытый IFrame и в него грузить чисто скрипт.


> palva ©   (31.05.06 18:38) [3]

Можно по подробнее?


 
TButton ©   (2006-06-01 06:12) [5]

фигня какая-то
имхо, с iFrame"ом действительно будет проще и понятнее
тем более что iframe - единственный в (D)HTML контейнер позволяющий что-то в себя загружать без перезагрузки страницы


 
Zeqfreed ©   (2006-06-01 07:29) [6]

Я уже отладил свой скрипт с использованием информации из разных интернет-источников (например, http://www.dklab.ru/lib/Subsys_JsHttpRequest/), теперь работает в Опере, Фаерфоксе и ИЕ (тех версий что у меня наличествуют). Кому интересно, привожу код, демонстрирующий саму методику:

test.php:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
<script language="javascript">
function getObject(name) //(C) Yanis Prasol aka Gero
{
 var obj
 if (document.all)
   obj=document.all[name]
 else
 {
   obj=document.getElementById(name)
   if (!obj)
     obj=document.getElementsByName(name)[0]
   if (document.getElementsByName(name).length>1)
     obj=document.getElementsByName(name)
 }
 return obj
}

function displayData(a)
{
alert(a);
}

function loadRemoteData()
{
 var sd = getObject("scriptdiv");
  sd.innerHTML = "hello<s" + "cript></" + "script>";
 
 var s = sd.getElementsByTagName("script")[0];
  s.language = "JavaScript";
 
 var str = getObject("myform").text.value;
 var href = "getdata.php?in=" + str;
 
 if (s.setAttribute)
  s.setAttribute("src", href);
 else
  s.src = href;
}
</script>
</head>
<body>
<div id="scriptdiv" style="display: none"></div>
<form id="myform">
<input name="text" type="text" value="" />
<input type="button" value="Обработать" onClick="loadRemoteData()" />
</form>
</body>
</html>


getdata.php:
<? if (isset($_REQUEST["in"])) { ?>
 displayData("<?=$_REQUEST["in"]?>");  
<? } ?>


Меня, в общем-то, сейчас все устраивает. Хотя, конечно, выглядит это все как какой-то «хак», но ничего особо сложного, на мой взгляд, нет.


 
Zeqfreed ©   (2006-06-01 07:34) [7]

В данный момент пытаюсь разобраться с mod_rewrite, да что-то все никак не получается :( Нужно то простенькое правило, чтобы перенаправлять все запросы кроме картинок, яваскриптов и каскадны таблиц на один скрипт…



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.012 c
1-1147777263
Stanislav
2006-05-16 15:01
2006.06.25
Данные в WORD из Потока


6-1139889800
Интересующийся
2006-02-14 07:03
2006.06.25
Как поставить и прочитать кук при помощи TServerSocket?


1-1147778258
pheonix
2006-05-16 15:17
2006.06.25
определение высоты панели задач


3-1146563364
D@Nger
2006-05-02 13:49
2006.06.25
запрет на редактирование в колонке DBGrid


15-1149208471
TButton
2006-06-02 04:34
2006.06.25
(JS) mouse event в FireFox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский