Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: MiguelCanellas en 22 Julio 2020, 08:33



Título: [Pregunta]: ¿Por qué y cómo puedo resolver esto?
Publicado por: MiguelCanellas en 22 Julio 2020, 08:33
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
  1.                        .done(function(results)
  2. {
  3. $('#box_element').append(results);
  4. })
  5.  

y en el archivo php que es llamado...
Código
  1. <?php
  2. // [...]
  3.  
  4.      ?>
  5.      <h6>Este es el dato de ajax: <script type="text/javascript">document.write('un dato');</script></h6>
  6.      <?php
  7.  
  8. // [...]
  9. ?>
  10.  

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...


Título: Re: [Pregunta]: ¿Por qué y cómo puedo resolver esto?
Publicado por: Drakaris en 22 Julio 2020, 19:16
Este archivo PHP contiene HTML, pureba de cambiar tu archivo a:
Código:
<?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()


Título: Re: [Pregunta]: ¿Por qué y cómo puedo resolver esto?
Publicado por: MinusFour en 22 Julio 2020, 23:16
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
  1. 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


Título: Re: [Pregunta]: ¿Por qué y cómo puedo resolver esto?
Publicado por: MiguelCanellas en 23 Julio 2020, 19:36
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..


Título: Re: [Pregunta]: ¿Por qué y cómo puedo resolver esto?
Publicado por: MinusFour en 23 Julio 2020, 19:55
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
  1. $('body').append('un dato');