текущее время с использованием AJAX не работает - PullRequest
0 голосов
/ 23 июня 2011

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

Кроме того, я использую инфраструктуру Symfony.

В теле я получил

<body onload="showCurrentTime()">

До этого:

<script type="text/javascript" src="/js/curr_time.js"></script>

curr_time.js

//Once the document is loaded, execute the showCurrentTIme function
//This is the AJAX function that displays the current time on the screen.
$(document).ready(function(){ showCurrentTime(); });    

function showCurrentTime() {
    //Call the current time web service,
    //grab the time off the server, and apply it to the 
    //end-user client after waiting for the document to load

    $(document).ready(function() {

        //Make the call to the XML web service
        $.get("currentDateTime.php", function(currentDateTime) {
            //Format the time returned by the server
            var time = [ $("hour", currentDateTime).text(), 
            ":", 
            $("min", currentDateTime).text() ];

            //Determine how many milliseconds to will wait until 
            //the time needs to be refreshed again
            var refresh = [(60 - $("sec", currentDateTime).text()) * 1000 ];

            //Display the time on the end-user client
            $("#currentTime").html(time.join(''));

            //Set a timer so that the time on the end-user client updates 
            // in sync with the server time to display the true current time
            setTimeout('showCurrentTime()', refresh);
        });
    });
}

В той же папке у меня есть PHP-файл currentDateTime.php

<?php
#Need to specify that this is an XML document in order for it to work with AJAX
header('Content-Type: text/xml');

#Set variables equal to each part of the date and time
$year = date("Y"); 
$mon = date("m");
$mday = date("d");
$hour = date("H");
$min = date("i");
$sec = date("s");

#Create the XML document of the current date and time
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
echo '<currentDateTime>' . "\n";
echo "\t" . '<year>' . $year . '</year>' . "\n";
echo "\t" . '<month>' . $mon . '</month>' . "\n";
echo "\t" . '<day>' . $mday . '</day>' . "\n";
echo "\t" . '<hour>' . $hour . '</hour>' . "\n";
echo "\t" . '<min>' . $min . '</min>' . "\n";
echo "\t" . '<sec>' . $sec . '</sec>' . "\n";
echo '</currentDateTime>' . "\n";
?>

И втело,

<p id="currentTime">--:--</p>

Я давно пытаюсь найти ошибку, но безуспешно ...

1 Ответ

1 голос
/ 24 июня 2011

Ваша функция showCurrentTime() в состоянии публикации делает только одно: установить обработчик $(document).ready().Вы хотите назвать его из документа готовым (что вы уже делаете), а не устанавливать другой обработчик внутри своей функции.Просто избавьтесь от лишних $(document).ready() вещей внутри этой функции следующим образом:

function showCurrentTime() {

   $(document).ready(function() {  // DELETE THIS LINE

       //Make the call to the XML web service
       $.get("currentDateTime.php", function(currentDateTime) {
           // rest of your function goes here...
       });

   });  // DELETE THIS LINE
} 

Я уверен, что это главная проблема.

Вторая проблема заключается в том, что при создании вашегоrefresh переменная, которую вы назначаете для указания массива с одним элементом, а не с числом.Снимите квадратные скобки.

Кроме того, в вашей JS-файле есть строка:

$(document).ready(function(){ showCurrentTime(); });

и загрузка тела в вашем HTML:

<body onload="showCurrentTime()">

является избыточным.Выберите один (желательно тот, который находится в файле JS).

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