2012-04-11 22 views
5

Tengo una función que hace eco de javascript para navegar a una página diferente. Mientras se produce la navegación, elecho Javascript window.location.href no funciona

echo 'window.location.href="'.$url.'";'; 

no funciona y simplemente lo imprime en la pantalla.

"window.location.href="./index.php"; 

uso mi función de esta manera: redirect("./index.php");

Mi función php es el siguiente

function redirect($url) 
    {  
    if (!headers_sent()) 
    {  
     header('Location: '.$url); 
     exit; 
    } 
    else 
    {  
     echo '<script type="text/javascript">'; 
     echo 'window.location.href="'.$url.'";'; 
     echo '</script>'; 
     echo '<noscript>'; 
     echo '<meta http-equiv="refresh" content="0;url='.$url.'" />'; 
     echo '</noscript>'; exit; 
    } 
} 
+0

Su $ url debe estar debidamente escapó en caso de que contiene una". De todos modos, es la página de una página html? El navegador podría ser interpretting como texto sin formato. Además, al ser un poco pedante, los dictados de la especificación HTTP esa ubicación debe tener un URI completo a continuación, no una URL relativa. – Corbin

+0

Es una página php. Mi proyecto requiere que proporcione direcciones URL relativas, por lo tanto no tengo otra opción. – zed

+0

Una página PHP no significa que se interprete automáticamente como HTML . – Corbin

Respuesta

4

Su navegador trata la respuesta como texto sin formato.

Anteponde a tus respuesta a Content-Type: text/html\ n más envuelve tu contenido dentro de una etiqueta <html></html>.

+0

if headers_sent(). No puede enviar exactamente un encabezado Content-Type, puede? Las etiquetas probablemente obliguen a un navegador a verlo como HTML. – Corbin

+0

Esto funciona. Todo lo que hice fue agregar un eco "" en el inicio de la función y un eco "" al final de la función. – zed

+0

¿por qué no votar o aceptar entonces? –

0

Pruebe de esta manera.

<?php 
$yourURL="http://www.stackoverflow.com"; 
echo ("<script>location.href='$yourURL'</script>"); 
?> 
+0

No funciona. Devuelve el texto en color de texto location.href = './Index.php' – zed

+0

@zed, editado el código. –

0

Por qué no utilizar output buffering y no tener que lidiar con JavaScript o meta redirecciones en absoluto?

<?php 
// Top of your page 
ob_start(); 

// Code goes here 

// Redirect 
if ($redirect_is_necessary) 
{ 
    header('Location: '.$url); 
    exit; 
} 

// Rest of page goes here 

// Bottom of page 
ob_end_flush(); 
?> 
+0

Gracias. Esto funciona perfectamente bien. Sin embargo, esperaba solo la redirección de JavaScript. – zed

Cuestiones relacionadas