Перенаправление JavaScript - PullRequest
1 голос
/ 02 июня 2011

Вот код, который у меня есть,

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/"+<? $name ?>+"/output.txt";
    setTimeout("top.location.href = url",1000);
</script>

$name - это переменная PHP с именем каталога, в который я пытаюсь перенаправить.

Нет необходимостисказать, это не работает.Что с этим не так?Я не знаю много о javascript, поэтому я, вероятно, сделал что-то глупое

Спасибо

Ответы [ 7 ]

6 голосов
/ 02 июня 2011

Если вы смешиваете PHP с JavaScript, всегда рекомендуется проверять вывод, отправляемый в браузер: щелкните правой кнопкой мыши на своем веб-сайте и нажмите на источник просмотра!

JavaScript не волнуетявляется ли содержимое, отправляемое ему, статическим HTML, из базы данных или сгенерированным PHP.Если он находится в выводе, он его проанализирует.

Если бы вы сделали это, вы заметили, что вы не echo используете переменную $name.

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/"+<? echo $name ?>+"/output.txt";
    setTimeout("top.location.href = url",1000);
</script>

Но это дало бы вам

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/"+ foo +"/output.txt";
    setTimeout("top.location.href = url",1000);
</script>

Что не является допустимым JavaScript, поскольку foo теперь является переменной JS, а не строкой.

Итак, вы должны иметь:

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/<? echo $name ?>/output.txt";
    setTimeout("top.location.href = url",1000);
</script>

Кроме того, передача строки в setTimeout (или setInterval) не рекомендуется;по тем же причинам против использования eval(), поэтому вы должны получить что-то вроде этого:

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/<? echo $name ?>/output.txt";
    setTimeout(function () {
        top.location.href = url
    },1000);
</script>
5 голосов
/ 02 июня 2011

Передать функцию, а не строку, в setTimeout.

var url = "http://localhost:8888/uploads/<?= $name ?>/output.txt";
setTimeout(function ()
{
    top.location.href = url;
}, 1000);

Я предполагаю, что $name правильно заполнен PHP.

3 голосов
/ 02 июня 2011

Попробуйте это:

setTimeout(function() { top.location.href = url; }, 1000);
2 голосов
/ 02 июня 2011

Попробуй так:

var url = "http://localhost:8888/uploads/"+<? $name ?>+"/output.txt";
setTimeout(function() {
    top.location.href = url;
}, 1000);
1 голос
/ 02 июня 2011

Используйте 'echo' или слегка нечитаемый короткий код php <?=, чтобы отобразить переменную.

<script language="JavaScript">
    var url = "http://localhost:8888/uploads/<?php echo $name; ?>/output.txt";
    setTimeout(function(){
        top.location = url;
    }, 1000);
</script>

Я знаю, что создал еще одно закрытие, но чувствую, что оно более читабельно.

1 голос
/ 02 июня 2011
 <?php echo "var url = 'http://localhost:8888/uploads/$name/output.txt'";  ?>

Удалите плюсы и скобки - просто поместите переменную в URL. Также используйте Firebug для устранения проблем с кодом JS: http://getfirebug.com/

0 голосов
/ 02 июня 2011

Должно быть:

window.location.href = url
...