Значения $ _GET не задаются во время запроса AJAX - PullRequest
0 голосов
/ 16 апреля 2011

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

calendar.php:

<?php
    function calendar($selectedDate = "now") {
            $selectedDate = strtotime($selectedDate);
            $theFirst = strtotime(date('m/01/Y', $selectedDate));
            $weekDayOfTheFirst = (int) date('w', $theFirst);
            $lastDayOfTheMonth = (int) date('j', strtotime('-1 day', strtotime('+1 month', $theFirst)));
            $numberOfWeeks = ceil(($weekDayOfTheFirst + $lastDayOfTheMonth) / 7);
            $selectedMonth = (int) date('m', $selectedDate);

            echo "<table id=\"calendar\"><tr><td onclick=\"updateCalendar('";
            echo date("F", strtotime('-1 month', $selectedDate)) . "', '" . date("Y", strtotime('-1 month', $selectedDate));
            echo "')\"><a href=\"#\">&lt;</a></td><th colspan=\"5\">" . date("F 'y", $selectedDate) . "</th><td onclick=\"updateCalendar('";
            echo date("F", strtotime('+1 month', $selectedDate)) . "', '" . date("Y", strtotime('+1 month', $selectedDate));
            echo "><a href=\"#\">&gt;</a></td></tr>";
            echo "<tr><th>S</th><th>M</th><th>T</th><th>W</th><th>R</th><th>F</th><th>S</th></tr>";
            for ($week = 0; $week < $numberOfWeeks; $week++) {
                    echo "<tr>";
                    for ($dayOfTheWeek = 0; $dayOfTheWeek <= 6; $dayOfTheWeek++) {
                            $date = strtotime($dayOfTheWeek + $week * 7 - $weekDayOfTheFirst . 'days', $theFirst);
                            $dayOfTheMonth = (int) date('j', $date);
                            echo "<td" . (date('m/Y', $date) == date('m/Y', $selectedDate) ? "" : " class=\"outOfMonth\"");
                            echo ($date == $selectedDate ? " id=\"today\"" : "") . "><a href=\"#\">" . $dayOfTheMonth . "</a></td>";
                    }
                    echo "</tr>";
            }
            echo "</table>\n";
    }

    echo "<div>" . $_GET["month"] . "</div><div>" . $_GET["year"] . "</div>";
    if (isset($_GET["month"]) && isset($_GET["year"])) {
            echo "<div>GET</div>";
            calendar($_GET["month"] . ' ' . $_GET["year"]);
    } else {
            echo "<div>not GET</div>";
            calendar();
    }
?>

calendar.js:

function updateCalendar(month, year) {
    var xmlhttp;
    if (window.XMLHttpRequest) {    // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
    } else {    // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    document.getElementById("sideBar").innerHTML = xmlhttp.responseText;
            }
    }
    xmlhttp.open("GET", "/home2/crompton/scripts/calendar.php?month=" + month + "&year=" + year, true);
    xmlhttp.send();
}

Ответы [ 3 ]

4 голосов
/ 16 апреля 2011

Мне кажется странным делать запрос GET к пути ОС.Как насчет простого запроса к http://localhost/calendar.php?month=4&year=2011 (или какому-либо другому серверу, на котором вы работаете).

Это будет наиболее целесообразно, поскольку именно веб-сервер устанавливает переменные $ _GET, иэтот веб-сервер обычно прослушивает порт 80. Когда вы делаете этот вызов, я уверен, что ни один веб-сервер не слушает.

0 голосов
/ 16 апреля 2011

@ Mike: true, запросы GET не работают с путями ОС, только с путями сервера.

В любом случае, всегда следует использовать абсолютные пути в подобных ситуациях, это безопаснее:

xmlhttp.open("GET", "http://localhost/home2/crompton/scripts/calendar.php?month=" + month + "&year=" + year, true);

0 голосов
/ 16 апреля 2011

Почему бы не использовать jQuery и не передать совместимость браузера кому-либо еще? Кроме того, публикация лучше, чем получение в большинстве случаев, значения urlencoding действительно ужасны.

function updateCalendar(upd_month, upd_year){
    $.post("/home2/crompton/scripts/calendar.php",
           {
             month: upd_month,
             year: upd_year
           },function(data){
             //handle successful response here.
           }
    );
}

Вам придется переключить ваши php $ _GET на $ _POST, если вы используете этот метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...