Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   No pasa valores de var php a JS (https://www.clubdelphi.com/foros/showthread.php?t=92945)

jhonalone 24-03-2018 23:32:35

No pasa valores de var php a JS
 
Hola amigos.
Siento volver a tener que solicitar vuestra ayuda.
He pasado muchas variables de php a js pero no sé por qué aquí no puedo.
El código que envío es de prueba, lo digo por Ñuño. Cuando consiga pasar las variables ya lo daré una forma más precisa, no me olvido de las "buenas formas".

No entiendo por qué no me pasa los valores.

Os copio la función. He constatado que lee el archivo. Pero no pasa los valores. La intención es pasarlos al array "datosM". Utilizando jason_encode ya sé que me funcionaría haciendo algunos cambios, pero no quisiera utilizarlo, por motivos que no vienen al caso.

Código PHP:

function HazArrayM_txt()
{
var l;
datosM = []; // Vaciamos el array

<?php        
if (file_exists('XX/Prueba.txt'))
{
    
$fp fopen('XX/Prueba.txt''r');
    while (!
feof($fp))
    {
        
$linea fgets($fp);
        
$l strlen($linea);
        if (
$l 17
        
$linea substr($linea016);
        {
        
?>
    l = <?php echo $linea;?>
        //datosM.push(l);
    alert(l);
        <?php
        
}
    }
    
fclose($fp);
}
// if    
    
?>        
}; // fin HazArrayM


¿Alguien puede decirme por qué no se pasan los datos?

Gracias, de antemano por vuestro tiempo.

Saludos.

yusnerqui 25-03-2018 01:29:26

Creo que si encierras entre etiquetas <script> tu variable debería funcionar correctamente

Código:

  echo "<script>i=5 ; alert(i);</script>"
debe funcionar.


Saludos

jhonalone 25-03-2018 12:52:35

Gracias, yusneerqui.

Creo que no me expliqué bien. La función pertenece a JS. Y ya he utilizado otras veces algo semejante. La función completa es así.

Código PHP:

<script>
function HazArrayM_txt()
{
var l;
datosM = []; // Vaciamos el array

<?php        
if (file_exists('XX/Prueba.txt'))
{
    
$fp fopen('XX/Prueba.txt''r');
    while (!
feof($fp))
    {
        
$linea fgets($fp);
        
$l strlen($linea);
        if (
$l 17
        
$linea substr($linea016);
        {
        
?>
    l = <?php echo $linea;?>
        //datosM.push(l);
    alert(l);
        <?php
        
}
    }
    
fclose($fp);
}
// if    
    
?>        
}; // fin HazArrayM
</script>

Saludos.

yusnerqui 25-03-2018 15:35:09

Es que estás intentando desde el servidor crear un arreglo en la memoria del cliente, eso va contra toda lógica, si quieres armar el arreglo deberá ser un arreglo literal del tipo datosM = [a,b,c...]; pero que quede así escrito en la página. Mira este link
https://desarrolloweb.com/articulos/...cript-php.html

Recuerda que el php se ejecuta en el servidor y el js en el cliente, por tanto si intentas hacer
lo que dices no trabaja. Una ves mostrada la página en el cliente debes usar ajax u otro mecanismo similar para comunicarte con el servidor y "traer"
la información que necesitas.



jhonalone 25-03-2018 20:04:48

Muchas gracias yusnerqui por tu interés.

He visitado el enlace que me dejaste. Creo que hace lo contrario de lo que yo estoy haciendo.

Me explico: yo utilizo PHP dentro de una función JS y en el link que me dejaste, (no lo entiendo muy bien), pero creo que se hace lo contrario, es decir usar JS dentro de una función PHP.

Yo me manejo mejor usando PHP dentro de JS. Y no me ha ido mal.

Con esta modalidad de construcción (ni mejor ni peor que otra) me apaño mejor (repito).

La función que transcribo a continuación FUNCIONA PERFECTA. La he "super-comentado" a propósito para se entienda perfectamente, (aunque reconozco que, para la mayoría de vosotros, no es necesario).

Código PHP:

<SCRIPT>
    // Empieza JS Definitivamente
    // Empieza la función HazArrayM_txt() de JS
function HazArrayM_txt() 
{

    datosM = []; // Vaciamos el array de JS o lo creamos si no existe
    // Acaba JS provisionalmente
// empieza PHP    provisionalmente
<?php     
if (file_exists('XX/Prueba.txt'))
{       
    
$fa2 file('XX/Prueba.txt'); // leemos todo el fichero en un array PHP
        
    
$size2 count($fa2);        
    for(
$i=0$i<$size2$i++) 
    {        
    
    
$l strlen($fa2[$i]);
    if (
$l 17
    {
        
$text2 explode("|",rtrim($fa2[$i]));
        
$linea $text2[0];     //$text2[0] ya tiene la string de 16 caracteres que me interesa    
?> 
//Acaba PHP provisionalmente
    // sigue JS provisionalmente
    datosM.push(<?php echo json_encode($linea);?>); // Pasamos datos de PHP a JS
    // Termina JS provisionalmeente
// Sigue PHP provisionalmente    
<?php    
    
// para if ($l > 17) de PHP
    
// para for de PHP
    
unset( $fa2 );
// para if file_exists    
?>    
// termina PHP definitivamente
};  // Termina la función HazArrayM_txt() de JS
    // Termina JS definitivamente
</SCRIPT>

Ahora bien, NO QUIERO USAR "json_encode"

Me diréis: " si funciona... ¿Por qué pides ayuda?"

Os repito: NO QUIERO USAR "json_encode"

Me diréis: "¿por qué?"

Respondo: voy a encriptar la página con un programa que no reconoce json, pero sí JS puro.

Me gustaría, si es posible, conseguir el arreglo (array) en JS desde un fichero PHP, SIN TENER QUE RECURRIR A JSON.

Intenté hacerlo leyendo el fichero, línea por línea, pero no consigo hacer el array de JS. NO ME PASA LOS VALORES DE LAS VARIABLES OBTENIDAS EN PHP A JS. Al menos de la forma que lo estoy intentando.

Gracias por soportar mi "pesadez"

Saludos cordiales.

yusnerqui 25-03-2018 22:11:32

Pues ya me dirás como lo resuelves:D. De todos modos no dejaré de insistir, a mi entender, estás planteando mal el asunto, una función js solo puede ser llamada cuando la página está cargada en la pc del usuario, allí no trabajará tu código php pues el php solo funciona en el servidor.
Si lo has hecho antes revisa bien el modo en que lo hiciste. Yo no tengo referencias de que esto sea posibe, siento no poder ser más útil.

saludos

AgustinOrtu 25-03-2018 23:45:02

Coincido con yusnerqui. Realiza la peticion por ajax y desde PHP le podras retornar la informacion "masticada" como quieras. De otra manera es ir en contra de la corriente...la web es compleja, no lo hagas mas complicado aun

jhonalone 26-03-2018 18:56:22

Gracias yusnerqui. Gracias Agustin.

Sinceramente, agradezco vuestro interés. He usado la combinación anterior (PHP en JS) con buenos resultados hasta ahora. De hecho la última copia de la función, (la que he comentado hasta la saciedad) FUNCIONA PERFECTA.

No sé hacerlo de otro modo. Si vosotros conocéis otra manera de hacerlo, si tenéis ganas y tiempo, os agradecería que le dierais la vuelta a la función y me la hicierais llegar.

Gracias de nuevo.
Saludos cordiales.

yusnerqui 26-03-2018 19:01:09

Prueba si esto te funciona,

Código:

<script>
function HazArrayM_txt()
{
var l;
datosM = []; // Vaciamos el array

        <?php       
                if (file_exists('XX/Prueba.txt'))
                {
                        $fp = fopen('XX/Prueba.txt', 'r');
                        echo "datosM = [";
                        while (!feof($fp))
                        {
                                $linea = fgets($fp);
                                $l = strlen($linea);
                                if ($l > 17) {
                                  $linea = substr($linea, 0, 16);       
                                  echo "$linea ,";       
                                }
                        }
                        fclose($fp);
                }// if   
                echo "]";
        ?>       
}; // fin HazArrayM

</script>

Básicamente es tu función pero en ves de intentar escribir en la memoria del cliente trato de crear el arreglo literal como en el ejemplo que te puse antes.

saludos

yusnerqui 26-03-2018 20:09:17

Prueba si esto te funciona,

Código:

<script>
function HazArrayM_txt()
{
var l;
datosM = []; // Vaciamos el array

    <?php       
        if (file_exists('XX/Prueba.txt'))
        {
            $fp = fopen('XX/Prueba.txt', 'r');
            echo "datosM = [";
            while (!feof($fp))
            {
                $linea = fgets($fp);
                $l = strlen($linea);
                if ($l > 17) {
                  $linea = substr($linea, 0, 16);       
                  echo "'$linea' ,";       
                }
            }
            fclose($fp);
        }// if   
        echo "]";
    ?>       
}; // fin HazArrayM

</script>

Básicamente es tu función pero en ves de intentar escribir en la memoria del cliente trato de crear el arreglo literal como en el ejemplo que te puse antes.

saludos

Edito: Faltaba encerrar el texto entre comillas.

jhonalone 26-03-2018 21:31:41

Gracias, yusnerqui por tu esfuerzo en ayudarme.

Lo voy a probar y te cuento.

Un saludo muy cordial.

jhonalone 26-03-2018 22:01:15

¡¡FABULOSO!!, yusnerqui.

¡¡Funcionó a la primera!!

Hice una reseña en tu reputación.

¡Ya eres mi héroe!

¡Un millón de gracias!

Abusando de tu buena voluntad, ¿Podrías comentarme el script, o explicarme cómo funciona?
Lo digo para recibir una clase magistral TUYA que puede servirme para aprender a hacerlo por mí mismo la próxima vez.

Si es posible. Si no, no te preocupes, ya me has ayudado bastante.

Inmensamente agradecido.

yusnerqui 27-03-2018 01:09:10

Jajajajaja, me he reido bastante con tu mensaje, el egómetro me explotó al leerlo jajaja.

Lo primero que debes saber es que no estás ejecutando php desde js ni mucho menos, sino que estás usando php para construir tu código js. El efecto de este código es el mismo que si tú te leyeras el fichero de texto, determinaras los trozos de cadena a poner y los teclearas en el arreglo. Si das clic derecho a tu navegador y seleccionas ver codigo fuente notarás que tu arreglo está declarado así

Código:

  datosM = ['Primera cadena', 'Segunda  cadena', 'Tercera cadena'...]
y esa fue la labor del php, que como te hemos explicado se ejecutó en el servidor antes que la web fuera mostrada al usuario final.

Solo te comentaré un par de cosas puesto que la función es practicamente la misma que tú supercomentastes.
Código:

<script>
function HazArrayM_txt()
{
var l;
datosM = []; // Vaciamos el array

    <?php        //inicio php
        if (file_exists('XX/Prueba.txt'))
        {
            $fp = fopen('XX/Prueba.txt', 'r');
            echo "datosM = [";//comienzo a armar el arreglo
            while (!feof($fp))
            {
                $linea = fgets($fp);
                $l = strlen($linea);
                if ($l > 17) {
                  $linea = substr($linea, 0, 16);       
                  echo "'$linea' ,";  //le voy agregando cada elemento, notese la comilla simple para enmarcar la cadena   
                }
            }
            fclose($fp);
        }// if   
        echo "]";//cierro el corchete del arreglo.
    ?>      //termino php 
};

</script>

No hay mucho mas que comentar. Solo que debes profundizar más puesto que estos son temas un poco complejos y el enfoque a veces es determinante.

Saludos

jhonalone 27-03-2018 16:11:38

Ja, ja, ja.

¡Que buen humor tienes yusnerqui , y qué buena predisposición de ayudar!
Muchas gracias, de nuevo.
Ahora entiendo la construcción, gracias a ti.
Siento lo del egómetro. Ja,ja,ja.

Un saludo muy cordial.

Ñuño Martínez 02-04-2018 17:20:48

Me han pitado los oídos... :rolleyes:


La franja horaria es GMT +2. Ahora son las 10:20:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi