Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Подсветка дат без перезагрузки


Автор: Black_leopard 2.3.2007, 19:22
Мне нужно сделать, чтобы при выборе года и даты без перезагрузки страницы происходил поиск по базе данных дат, на которые уже есть события и подсвечивались эти даты в календарике. 
Реализовал на JavaScript необходимые действия, все делает правильно получает даты, но вот как их из функции-обработчика события onreadystatechange вытащить (глобальными переменнами не получается, т.к. файлы js разные используются, но загружаются в одном документе). 
В html хранятся в виде строки эти данные (функция handleReadyStateChange()). Если сделать return то каким образом?? Просто так написать не получается.
Вот код JavaScript
Код


var xmlHttp = createXMLHttpRequestObject();

function createXMLHttpRequestObject() {
    var xmlHttp;
    try {
        xmlHttp = new XMLHttpRequest();
    }
    catch (e) {
        var xmlHttpRequestVersion = new Array ("MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP");
        for (var i=0; i<xmlHttpRequestVersion.length && !xmlHttp; i++) {
            try {
                xmlHttp = new ActiveXObject(xmlHttpRequestVersion[i]);
            }
            catch (e) { }            
        }
    }
    if (!xmlHttp)
         alert("Error creating the XMLHttpRequest object.");
    else 
        return xmlHttp;
}

function process(Year, Month) {
    if (xmlHttp) {
        try {
            xmlHttp.open("GET", "ajax/ajax.php?year="+Year+"&month="+Month, true);
            xmlHttp.onreadystatechange = handleReadyStateChange;
            xmlHttp.send(null);
        }
        catch (e) { 
            alert(e.ToString());
        }
    }
}

function handleReadyStateChange() {
    if (xmlHttp.readyState == 4)  {
     if (xmlHttp.status == 200)    {
            var xmlResponse = xmlHttp.responseXML;
            if (!xmlResponse || !xmlResponse.documentElement) {
                throw("Invalid XML structure");
            }
            var rootNodeName = xmlResponse.documentElement.nodeName;
            if (rootNodeName == "parsererror") throw("Invalid XML structure");
            xmlRoot = xmlResponse.documentElement;
            dateArray = xmlRoot.getElementsByTagName("data");
            var html = "";
            for (var i=0; i<dateArray.length; i++) {
                html = html + "|" + dateArray.item(i).firstChild.data;
            }            
     }
     else {
           alert("There was a problem accessing the server: " + xmlHttp.statusText);
     }
    }    
}


А вот сам apax.php
Код

    header('Content-Type: text/xml');
    session_start();
    require_once(getenv("DOCUMENT_ROOT")."/class/database.php");
    $db = new database();
    $month = (isset($_GET['month']))?$_GET['month']:00;
    $year = (isset($_GET['year']))?$_GET['year']:00;
    $query = "SELECT * FROM `registr_occupation` WHERE `Id_user` = '".$_SESSION['Id']."' AND `Date` LIKE '".$year."-".$month."-%' ORDER BY `Date` ASC";
    $result = mysql_query($query);
    echo '<response>';
    while ($array_fetch = mysql_fetch_array($result)) {
        $explodeDate = explode("-",$array_fetch['Date']);
        $day = $explodeDate[2];
        echo '<data>'.$day.'</data>';
    }
    echo '</response>';


Помогите, пожалуйста. У меня знаний JavaScript не очень много, поэтому сам додуматься не могу  smile 

Автор: Black_leopard 4.3.2007, 09:25
Неужели никто не встречался с таким вопросом? Я пытался записывать это значение в поле hidden, но код javascript, не видет эту форму, можно ли каким-либо образом создать это поле хидден или в cookie закинуть эти значения? 

Автор: AKS 4.3.2007, 12:37
Цитата(Black_leopard @  4.3.2007,  09:25 Найти цитируемый пост)
Я пытался записывать это значение в поле hidden...

А зачем в hidden? Можно ведь сразу вызвать функцию, которая бы занималась разбором этой строки (та, что в переменной html). Надо ведь что - проанализировать строку ответа и если там "что-то где-то", то внести изменения в визуальное представление календарика (подсветить нужные даты). Так ведь?

Автор: Black_leopard 4.3.2007, 19:53
Точно, можно и так smile, но тут возникает еще одна сложность как передать в эту функцию-обработчик параметры, т.к. год и месяц (а также еще нужен id пользователя, который вошел), чтобы отрисовать календарик.
Но я сделал с помощью cookie, все работает отлично.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)