Войти

Показать полную графическую версию : AJAX - динамическая подгрузка данных без перезагрузки страниц


Страниц : [1] 2 3 4 5 6 7 8

vadimiron
16-03-2005, 13:48
Я никогда не обращал своё внимание на данную тему, так как динамическая подгрузка была очень сильно от браузера зависима, и чтобы пользоваться этой возможностью, надо было всегда все особенности популярных браузеров учитывать. Но сегодня нашёл статью, авторы которой утверждают, что их способ работает во всех браузерах (читай: кроссбраузерный).
Вот статья: http://dklab.ru/chicken/nablas/41.html

Что вы думаете об этом??
Кто нибудь что то подобное делал или использовал?

Vlad Drakula
16-03-2005, 14:04
vadimiron
я как то писал сайт который весь был на JS и весь генерился автоматически на стороне клиента...

vadimiron
может ты приведешь конкретную задачу а я подумаю над оптимальной ее организацией?

mar
16-03-2005, 15:48
Vlad Drakula
ты немного не понял - речь идет о динамической подгрузке контента с сервера без перезагрузки страниц, причем уже дано достаточно оптимальное кроссброузерное решение с очень подробными разъяснениями.

vadimiron
я читала эту статью. Мне очень нравится. Единственное - надо при программировании обращать внимание на безопасность. (Хотя в целом - решение достаточно безопасное, если делать все в пределах одного сайта и следить за собой :)) Там еще (на сайте автора) - обсуждение (http://forum.dklab.ru/comments/nablas/41_jshttprequestDynamicPumpingOfTheDataWithoutPerezagruzkiPages.html). Тоже стоит посмотреть.

Prisoner
17-03-2005, 13:28
Да, интересная штука, в особенности псевдокроссбраузерность :). Почему псевдо? В O7.54 она не работает. Об этой феньке еще написано тут (http://webmascon.com/topics/technologies/13a.asp), но исключительно для IE, M и FF. Лично я реализовывал такую штуку в админке для фирмы одной рязанской, это было очень удобно как пользователю, так и мне - было требование использовать для дел админских только IE не младше 5.5. Вышеприведенной статьей я и руководствовался... думаю, если разобраться с материалом по ссылке топикфаундера, можно довести дело до ума везде, было бы время :).

E-mail
17-03-2005, 21:34
новая версия сегодня в 15:00 вышла..

а методом post никак нельзя обмениваться без перегрузки?
4кб както не внушающе..

и еще помоему, чтото похожее в чатах августа используется.

E-mail
24-03-2005, 00:34
mar
кстати по поводу безопасности вот отрыл:
http://www.uinc.ru/articles/40/

что думаете господа?
мне вот не понятно что делает параметр false и true?
true я заметил используется при get запросах
а false как видно при методах trace и post.

кстати говоря мне удалось спомощью этого активного объекта произвести пост запрос, все дело в заголовках.

кому интересна тема, мнения плыз.

mar
24-03-2005, 00:43
E-mail
кстати по поводу безопасности вот отрыл:
http://www.uinc.ru/articles/40/
куки тут немного не при чем =)

E-mail
24-03-2005, 00:49
mar
ты доконца дочитай

iMP viSiOn
24-03-2005, 01:53
Есть опыт по созданию данной фишки под ASP. Вообщем суть, встала проблема, при выборе месяца и года ,автоматом в третьем ниспадающем меню выдавалось кол-во дней в выбраном месяце, конкретного года.

Для этого был написан JS файл, с функциями по перехват и отправке данных на сервер, файл соотв. где были формы и файл по обработке отосланых данных. Т.е. выбирают месяц и год, данные о выбранном сразу идут на файл с обработкой событий и третья форма после обработки получает кол-во дней. Все без перезагрезки страницы.

1. Скрипт файл, который можно имопртировать в файл с меню.

// Общий URL до файла (файл должен быть на сервере, где расположена сама страница) с обработкой событий
var url = "functions/aspvalidate.asp?month=";
var url2 = "&year=";

// Присваеваем результат запроса объекту
function handleHttpResponse()
{
if (http.readyState == 4)
{
// Присвоение результата после обработки конкретному объекту, в виде вложеного HTML кода
document.getElementById("DateDaySelectSpan").innerHTML = http.responseText;
}
}

// При изменении значения полей отправляем запрос снова
function updateSelection()
{
// Считываем значения двух ниспадающих меню
var SelectedMonth = document.getElementById("DateMonthSelect").value;
var SelectedYear = document.getElementById("DateYearSelect").value;

// Отсылаем переменные ффайлу с функциями обработки событий
http.open("GET", url + escape(SelectedMonth) + url2 + escape(SelectedYear), true);
http.onreadystatechange = handleHttpResponse;
http.send(null);
}

// Получаем заголовок HTTP объекта
function getHTTPObject()
{
var xmlhttp;

// Обработка события IE подобным браузером
/*@cc_on
@if (@_jscript_version >= 5)
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (E)
{
xmlhttp = false;
}
}
@else
xmlhttp = false;
@end @*/

if (!xmlhttp && typeof XMLHttpRequest != '1')
{
try
{
xmlhttp = new XMLHttpRequest();
}
catch (e)
{
xmlhttp = false;
}
}
return xmlhttp;
}

var http = getHTTPObject();

2. Едем дальше, код файла для обработки выбраного месяца и года.

<%
'// Обработка переменных адресной строки

if Session("CurrentUserLogin") <> 0 Then

'// Сбор идентификаторов из адресной строки
monthID = idStatus("month")
yearID = idStatus("year")

'// Функция замены вывода данных на экран [Response.Write]
Function echo(StringContent)
Response.Write(Stringcontent)
End Function

'// Функция обработки переменной адресной строки на предмет целочисленности
Function idStatus(txtQueryString)
if isNumeric(Request.QueryString(txtQueryString)) then
if Request.QueryString(txtQueryString) > 0 then
idStatus = Request.QueryString(txtQueryString)
else
idStatus = 0
end if
else
idStatus = 0
end if
End Function

'// Вычисление количества дней в текущем месяце
Function DaysInMonth(SelectedDate)
DaysInMonth2 = SelectedDate
CurrentDate = Day(DaysInMonth2)
BeginMonth = DateAdd("d",-(CurrentDate-1),DaysInMonth2)
EndMonth = (DateAdd("m",1, BeginMonth)-1)
DaysInMonth = Day(EndMonth)
End Function

'// Вывод количества дней в ниспадающее меню, в зависимости от выбранного месяца и года
TotalDays = DaysInMonth("1" & "/" & monthID & "/" & yearID)

echo "<select name='DateDaySelect' id='DateDaySelect'>"

'// Окончательный вывод данных в строку, которая уйдет с запросом обрано в документ с меню
for i = 1 to TotalDays
echo "<option value=" & i & selectedOption & ">" & i & "</option>"
next

echo "</select>"
end if
%>

Вроде это все, пришлось помучаться немного, но чтение литературы - вещь поразительно полезная :)

E-mail
24-03-2005, 02:20
iMP viSiOn
гы, а я задачу стоявшую не очень понял, нужно было показывать количество дней сколько прошло от даты которую выбрали?:)

под асп эт конечно круто:)

iMP viSiOn
24-03-2005, 10:21
хехе :) вообщем в зависимости от года и месяца, вывести макс. количество дней для выбранного месяца :) ай, какая к черту разница ... гланое пашет :Р

E-mail
03-04-2005, 16:54
вот пример работы этого объекта с методом post:



<script>
<!--
var req;

function loadXMLDoc(url,str)
{
if(window.XMLHttpRequest)
{
req=new XMLHttpRequest();
req.onreadystatechange=processReqChange;
req.open("POST",url,false);
req.send(null);
}
else if(window.ActiveXObject)
{
req=new ActiveXObject("Microsoft.XMLHTTP");
if(req)
{
req.onreadystatechange=processReqChange;
req.open('POST',url,false);
req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
req.send('&a='+str+'&');
}
}
}

function processReqChange()
{
document.form1.state.value=stat(req.readyState);
ab=window.setTimeout("req.abort();",5000);
if(req.readyState==4)
{
clearTimeout(ab);
document.form1.statusnum.value=req.status;
document.form1.status.value=req.statusText;
if(req.status==200)
document.form1.response.value=req.responseText;
}
}

function stat(n)
{
switch(n)
{
case 0: return "не инициализирован";
break;
case 1: return "загрузка...";
break;
case 2: return "загружено";
break;
case 3: return "в процессе...";
break;
case 4: return "готово";
break;
default: return "неизвестное состояние";
}
}

function requestdata(params)
{
loadXMLDoc('http.php',params);
}

-->
</script>

<form name=form1>
<table width=100% style="font-size: 100%">
<tr><td width=30% valign=top>
Состояние запроса
<td width=70%>
<input size=25 disabled type=text name=state value="">
<tr><td valign=top>Код статуса
<td><input disabled size=2 type=text name=statusnum value="">
<input disabled size=19 type=text name=status value="">
<tr><td valign=top>Данные от сервера
<td><textarea rows=6 name=response disabled></textarea>
<tr><td>Строка POST-запроса<td>
<input type=text name=getparams value="">
<input type=button onclick="requestdata(getparams.value);" value="POST">
</table>
</form>



http.php



foreach($_POST as $k=>$a)
echo $a;




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

iMP viSiOn
06-04-2005, 13:01
... аналогичная проблема, русский пропадает. За решение этой проблемы пока еще не брался, времени нету, если кто-то решит эту задачку, то ждемс ответа :)

E-mail
06-04-2005, 19:54
поставил модуль под php iconv всеравно проблема остается...

Prisoner
07-04-2005, 10:46
Поставить одно, так его ведь и использовать надо. Модуль - лишь набор функций. Сам он за вас делать ничего не будет.

archy
07-04-2005, 17:41
Может дело в urlencode?

E-mail
11-04-2005, 21:37
archy
что можно предпринять?:)

archy
12-04-2005, 08:46
перевести символы в вид %FF

mar
22-12-2005, 00:37
давайте я впишу сюда слово AJAX (Asynchronous JavaScript with XML), , - чтоб поисковики находили :) - а то сама с трудом эту тему нашла

Underson
23-12-2005, 13:29
<!--МАR прости но я не дочитал твой последний пост и поэтому повторился.. -->
наверное суда
я нашёл такую технологию AJAX и реализацию под php Sajax... вот так вот там можно сделать финкции php доступными из Ява скрипта и как пример было паказано как можно сделать чтение файла с диска без перезагрузки оформления... вот..




© OSzone.net 2001-2012