Javascript echo'd от PHP не запускается - PullRequest
2 голосов
/ 02 декабря 2011

У меня небольшая проблема с динамическим отображением JavaScript через php.Вот мой код

$url = "http://www.newsite.com";

echo "
    <html>
    <head>
    <title>Redirecting</title>
    </head>
    <body onload='redirect()'>
        Not Logged In

        <script type = 'text/javascript'>
    function redirect() {
        window.location=".$url."
        }
    </script>
    </body>
    </html>
    ";

Моя консоль javascript сообщает мне, что «redirect ()» не может быть найден (Uncaught ReferenceError: редирект не определен)

Есть идеи, что вызвало это?

Ответы [ 5 ]

5 голосов
/ 02 декабря 2011

Отбросьте это клиентское перенаправление полностью. Использование:

header("HTTP/1.0 302 Moved Temporarily"); 
header("Location: $url");
4 голосов
/ 02 декабря 2011

Вам не хватает кавычки.Это исправит вашу проблему:

function redirect() {
    window.location='".$url."';
}

В настоящее время ваша страница отображается следующим образом (обратите внимание на отсутствующие кавычки / синтаксическую ошибку):

function redirect() {
    window.location=http://www.newsite.com;
}
2 голосов
/ 02 декабря 2011

Код имеет проблему.

window.location=".$url." 

должно быть

window.location=\"".$url."\"
1 голос
/ 02 декабря 2011

Вы должны поместить эту функцию в область заголовка и обернуть ее следующим образом.

echo "
    <html>
    <head>
    <title>Redirecting</title>
    <script type = 'text/javascript'>
    function redirect() {
        window.location='".$url."."'
        }
    </script>
    </head>
    <body onload='redirect()'>
        Not Logged In


    </body>
    </html>
    ";
0 голосов
/ 02 декабря 2011

Как говорит @Tomalak, вам не следует использовать javascript для решения этой проблемы. Использовать перенаправление на сервер.

Однако существует более общая проблема с получением данных php в javascript. Я решу эту проблему здесь.

Вам необходимо правильно указать параметр $url для javascript и html. redirect() не определено, поскольку в нем есть синтаксическая ошибка.

Когда вам нужно передать встроенные данные javascript в html, используйте следующий шаблон. Это самый ясный и безопасный способ сделать это.

<?php
// 1. put all the data you want into a single object
$data = compact($url);
// $data === array('url'=>'http://example.org')

// 2. Convert that object to json
$jsdata = json_encode($url);

// 3. html-escape it for inclusion in a script tag
$escjsdata = htmlspecialchars($jsdata, ENT_NOQUOTES, 'utf-8');
// change utf-8 to whatever encoding you are using in your html.'
// I hope for your sanity you are using utf-8!

// 4. Now assign $escjsdata to a js variable in your html:

?>
<html>
<head>
<title>Redirecting</title>
</head>
<body onload='redirect()'>
    Not Logged In

    <script type = 'text/javascript'>
    function redirect() {
        var data = <?php echo $escjsdata ?>;

        window.location=data.url;
    }
</script>
</body>
</html>
...