[Pregunta]: ¿Por qué y cómo puedo resolver esto?

Iniciado por Leguim, 22 Julio 2020, 08:33 AM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

Básicamente estoy tratando de usar document.write en un archivo php que es llamado con una función ajax...

digamos que en la función tengo...

Código (javascript) [Seleccionar]

                       .done(function(results)
{
$('#box_element').append(results);
})


y en el archivo php que es llamado...
Código (php) [Seleccionar]

<?php
// [...]
         
      
?>

     <h6>Este es el dato de ajax: <script type="text/javascript">document.write('un dato');</script></h6>
     <?php

// [...]
?>



Lo que me pasa es que me pone toda la pantalla en blanco y me pone "un dato" pero me saca todo mi html... no le encuentro sentido a que pase eso...

Drakaris

#1
Este archivo PHP contiene HTML, pureba de cambiar tu archivo a:

<?php
// [...]
      
echo '<h6>Este es el dato de ajax: <script type="text/javascript">document.write("un dato");';</script></h6>
// [...]

OJO! Son comillas simples en el echo porque dentro del string utilizas comillas dobles. [en el string de write() cambie las comillas simples por las dobles ya que sino produciria un error]
      v--------- PHP               v--------- PHP
'    '  '    '                       "    "  "    "
  ^-----^------- strings        ^-----^------- strings

      v--------- string               v--------- string
'    "  "    '                       "    '  '    "
  ^-----^------- strings        ^-----^------- strings

Ahora cuando llames con AJAX, la salida será lo que tengas en el echo. Y se añadirá al #box_element con la funcion append()
Lo increible, no es lo que ves, sino como es

MinusFour

document.write hace eso. A menos que el documento se este cargando. Cargas el sitio web, realizas la petición, la respuesta a la petición tiene html con un script tag que corre document.write y finalmente jQuery inyecta el script y lo ejecuta.

Abre la consola en este sitio web, escribe:

Código (javascript) [Seleccionar]
document.write('un dato');

y ocurrirá lo mismo.

Citar
Note: as document.write writes to the document stream, calling document.write on a closed (loaded) document automatically calls document.open, which will clear the document.

https://developer.mozilla.org/en-US/docs/Web/API/Document/write

Leguim

Pero por qué en otros códigos que tengo que no son de AJAX sino que son en una página HTML, el código "document.write" me imprime bien la variable de javascript y no me da problemas como ahora...

Bäsicamente estoy tratando de hacer un "echo" para javascript... y la idea es hacerlo sin cerrar todo entre comillas..

MinusFour

Cita de: MiguelCanellas en 23 Julio 2020, 19:36 PM
Pero por qué en otros códigos que tengo que no son de AJAX sino que son en una página HTML, el código "document.write" me imprime bien la variable de javascript y no me da problemas como ahora...

Bäsicamente estoy tratando de hacer un "echo" para javascript... y la idea es hacerlo sin cerrar todo entre comillas..

Porque el documento todavía se esta cargando. Entonces document.write escribe al documento actual. Si lo que quieres es escribir al final del documento HTML simplemente usa el append de jQuery:

Código (javascript) [Seleccionar]

$('body').append('un dato');