Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Что лучше использовать? (https://javascript.ru/forum/dom-window/4332-chto-luchshe-ispolzovat.html)

x-yuri 14.07.2009 08:05

var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");

необходимость в таком количестве вариантов сомнительна: "MSXML2.XMLHTTP" соответствует msxml3.dll ("MSXML2.XMLHTTP.3.0"), а у "Microsoft.XMLHTTP" только одна версия (1.0), которая опять же указывет на ту же msxml3.dll, из чего можно предположить, что его оставили для совместимости

Цитата:

Сообщение от infocean
Подскажите плизз как лучше организовать вывод полученных(c помощью ajax) данных (из файла load.php) во всплывающее окошко

какие это данные? И все зависит от того как будет организовано это окошко, насколько оно будет универсальным. Если окно будет использоваться только на одной странице, то его можно сразу в html прописать, но сделать изначально невидимым. Если надо, например, вывести сообщение об ошибке, то его можно вставить с помощью innerHTML.

infocean 14.07.2009 11:45

данные о пользователе например скрипт будет выводить :
<div>
            Новостей: 30<br />
            Комментариев: 600<br />
        </div>


Вот именно вопрос организации, для меня сложен.
Хотелось бы, чтобы окошко было универсальным, т.е. можно было размещать его на любой странице.

А примерный код самого окошка:
<div id="layer_message">
           <div id="header_mess">Сюда можно было бы подставлять заголовок</div>
           <div id="text_mess">А сюда текст</div>
     </div>

Но проблема заключается в том,что я не знаю как передать из php, две разные переменные, чтобы они подставились в код окошка.

p.s. Дошло,:) один из вариантов(но если у вас есть лучше, то с радостью выслушаю) - это генерировать окошко в php документе и выводить с помощью конструкции echo.
Но тут возник другой вопрос,как после получения ajax'ом результатов, можно вывести окошко?

x-yuri 14.07.2009 13:27

Как генерировать окно с помощью php? При загрузке страницы? Тогда в него все равно надо будет подставить результаты ajax-запроса. Генерировать в ajax-запросе? Если окно будет выводится еще и без ajax-запросов, то будет 2 версии (javascript, php): при изменении одной надо будет корректировать другую (так делать не стоит)

1) можно генерировать изначально невидимый каркас с помощью php, а содержимое подставлять с помощью javascript. Но тогда код, относящийся к окну будет в 3-х файлах (php-шаблон, javascript, css) и надо будет не забывать, кроме подключения js, css еще нарисовать каркас в страничке
2) можно сделать, чтобы разметка создавалась js-скриптом, т.е. примерно так
function msg( content ) {
    // создаем разметку окна, назначаем обработчики 
    // (закрытие окна) и присоединяем окно к документу, 
    // если еще не сделали этого (можно создавать каркас
    // один раз, а потом просто менять содержимое)

    // подставляем содержимое (content)

    // показываем окно
}

B~Vladi 14.07.2009 13:34

Цитата:

Сообщение от x-yuri
создавалась js-скриптом, т.е. примерно так

Ничё так, скрипт:)

infocean 14.07.2009 16:55

Если я всё правильно понял, то второй вариант мне больше подходит.
Пример:
файл load.php
echo "Какой-то текст";
ajax'ом получаю этот текст
Но возникло ещё пара вопросов:
1) Как мне вызвать эту функцию создающую окошко, после получения ответа ajax'ом(если можно, то кратенький пример опишите пожалуйста)
2) Как мне сделать подстановку Заголовка и текста в окно, т.е. как ajax'ом определить, что из полученных данных относится к заголовку окна, а что является текстом окна? (тут без примера не обойтись, т.к. я в ajax'е начинающий)

x-yuri 14.07.2009 18:42

1) так же, как любую другую функцию
2) чтобы передать несколько значений можно использовать JSON:
$o = array('a' => 1, 'b' => 'asd');
echo json_encode($o);

var o = eval( '('+xhr.responseText+')' );

infocean 14.07.2009 19:24

Огромное спасибо за ответы.
Пойду шаманить :)

infocean 15.07.2009 12:39

В общем, написал вроде простенькую функцию по созданию окошка, но не могу написать функцию удаления окошка, код привёл ниже.
Помогите кто-нибудь, пожалуйста.

код файла message.js:
function newmess(title,text)
{
	// получаем заголовок и текст
	this.title = title;
	this.text = text;
	
	// Ширина рабочей области
	this.getDocumentWidth = function()
	{
		return (window.innerWidth)?window.innerWidth:((document.all)?document.documentElement.offsetWidth:null);
	}

	// Высота рабочей области
	this.getDocumentHeight = function()
	{
		return (window.innerHeight)?window.innerHeight:((document.all)?document.documentElement.offsetHeight:null);
	}
	
	// Создаём окошко в памяти
	this.layer = document.createElement("div");
	this.layer.className = "layermess";
	this.layer.id = "layermess";
	this.layer.style.top = (this.getDocumentHeight()/2)-150 + "px";
	this.layer.style.left = (this.getDocumentWidth()/2)-150 + "px";
	this.header = document.createElement("div");
	this.header.className = "header";
	this.header.id = "header";
	// Как сделать чтобы див со словом "Закрыть", работал при клике на нём?(строка ниже не работает :( )
	this.header.innerHTML = this.title + "<div onclick=\"this.close()\">Закрыть</div>";
	//-------------------------------------------
	this.message = document.createElement("div");
	this.message.className = "message";
	this.message.id = "message";
	this.message.innerHTML = this.text;
	//this.layer.style.visibility = "visible";
	
	// Вставляем окошко в html страницу
	this.layer.appendChild(this.header);
	this.layer.appendChild(this.message);
	this.dialog = document.getElementById("all");
	this.dialog.appendChild(this.layer);
	
this.close = function()
{
	alert("Проверка");
	this.layers = document.getElementById("layermess");
	this.layers.style.visibility = "hidden";
};
}


файл index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Тестируем окошко</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="message.js"></script>
<script type="text/javascript">
function ShowMessage(title,text)
{
    wnd = new newmess(title,text);
    return wnd;
}
</script>
</head>

<body>
<div onclick="ShowMessage('Тест','Привет Мир!');">Открыть</div>
<div onclick="wnd.close();">Закрыть</div>
<div id="all"></div>
</body>

</html>


И если можно, то скажите, пожалуйста, правильно ли я вообще написал скрипт, т.к. на js первый раз писал, хорошо, что есть сайт и этот форум, очень много полезной инфы.

x-yuri 15.07.2009 14:34

1) this тут как минимум не обязателен, не вижу смысла пихать все в объект, если ты потом пользуешься разве что this.layer
2) close может получить доступ к layer следующим образом:
function a() {
    var layer = ...;
    function b() {
        // здесь можно использовать layer
    }
}

3) если делаешь "класс", то лучше методы в прототип добавлять, при твоем подходе для каждого объекта будет создаваться своя функция
function msg(){ ... }
msg.prototype.method1 = function() { ... }

4) с помощью document.createElement можно создать внешний контейнер, а все содержимое добавить с помощью innerHTML
5) getDocumentWidth, getDocumentHeight можно вынести из объекта (функции), это скорее функции общего назначения. Кроме того, какой-то там нестандартный способ определения размеров. Можешь посмотреть, как в некоторых фреймворках поступают
6) внутри атрибута this указывает на соответствующий элемент. Можно этот div создать с помощью createElement и назначить обработчик через свойство onclick

infocean 15.07.2009 15:29

Огромное спасибо, за советы, ответы и подсказки :)
Буду дальше разбираться, потом может выложу тут код своего окошка,вдруг кому пригодится.


Часовой пояс GMT +3, время: 12:27.