Скрипт в функции не будет отображаться - PullRequest
0 голосов
/ 05 марта 2011

Когда я пытаюсь отобразить

<script type='text/javascript'>
function rotate_$num(number) {
    num = number%$i;
    $('.$num').fadeOut('normal');
    $('#'+(num+1)).fadeIn('normal');
    number++;
    setTimeout('rotate_$num('+number+')',300);
}
</script>

изнутри функции в PHP, она не выводится, но когда я изменяю <script> на <div>, это работает.Кроме того, он работает, когда эхо находится только в php-файле, в котором нет ничего, кроме эха, он работает.

Вот вся функция:

function rename_name($name) {
    return str_replace(' ', '', $name);
}
function pane($result) {
    if($result['title']) {$title = ': '.$result['title'];}
    $name = rename_name($result[name]);
        echo "<div class='pane $name'>
            <h2>$result[name]$title</h2>";
        if (is_array($result['data'])) {
            $num = rand(0, 9999);
            foreach($result['data'] as $option) {

        $i++;

        if($i == 1) $display = 'block'; else $display = 'none';
                echo "<div id='$num$i' class='$num' style='display: $display;'><h3>$option[data]<span       class='whats'>$option[kind]</span></h3></div>";

            }
            //The below will echo when script is changed to div, why should it matter?
            echo "<script type='text/javascript'> function rotate_$num(number) { num = number%$i;

                    $('.$num').fadeOut('normal');
                    $('#'+(num+1)).fadeIn('normal');

                    number++;

                    setTimeout('rotate_$num('+number+')',300);
                }
            </script>";
            //The above will echo when script is changed to div, why should it matter?
        }
        else {
            echo "<h3>".$result['data']."<span class='whats'>$result[kind]</span></h3>";
        }
    echo "</div>";
}

А вот $массив результатов, передаваемый ему

Array
(
    [name] => Mint
    [type] => 0
    [data] => Array
        (
            [0] => Array
                (
                    [data] => 67
                    [kind] => hits today
                )

            [1] => Array
                (
                    [data] => 24
                    [kind] => unique hits today
                )

            [2] => Array
                (
                    [data] => 158351
                    [kind] => hits total
                )

            [3] => Array
                (
                    [data] => 17826
                    [kind] => unique hits total
                )

        )

)

Ответы [ 2 ]

0 голосов
/ 05 марта 2011

Я вставил точно такой же массив и получил ожидаемый результат.

Вы загружаете эти данные через AJAX и затем размещаете их на странице? Javascript не может записывать теги сценариев в DOM (по крайней мере, не через innerHTML) и поэтому просто игнорирует их.

Если это AJAX-данные, похоже, что вы используете много ненужной полосы пропускания для этой передачи, особенно при передаче того же сценария снова и снова. Я бы порекомендовал перенести только данные (либо в HTML, либо, если вы чувствуете себя действительно круто, в JSON, а затем запустить клиентский шаблон), а затем позволить исходному сценарию обрабатывать поворот. Мало того, что он на самом деле будет работать , но и получится более чистым и более управляемым В конце концов, если бы я работал над этим приложением и хотел изменить способ вращения панелей, я бы не стал сначала искать этот фрагмент кода.

0 голосов
/ 05 марта 2011

Я не уверен, в этом ли проблема, но я стараюсь не допускать, чтобы строки занимали несколько строк, как вы сделали с помощью своего выражения echo.Попробуйте использовать запись heredoc, например:

   $javascript = <<EOT
<script type='text/javascript'> function rotate_$num(number) { num = number%$i;
    $('.$num').fadeOut('normal');
    $('#'+(num+1)).fadeIn('normal');
    number++;
    setTimeout('rotate_$num('+number+')',300);
}
</script>
EOT;
    echo $javascript;

http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

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