2009-01-02 23 views
10

¿Cómo paso a tener una secuencia de comandos Javascript para solicitar una página PHP y pasarle datos? ¿Cómo hago para que el script PHP pase los datos al script Javascript?¿Cómo pasar datos de Javascript a PHP y viceversa?

Client.js:

data = {tohex: 4919, sum: [1, 3, 5]}; 
// how would this script pass data to server.php and access the response? 

server.php:

$tohex = ... ; // How would this be set to data.tohex? 
$sum = ...; // How would this be set to data.sum? 
// How would this be sent to client.js? 
array(base_convert($tohex, 16), array_sum($sum)) 

Respuesta

17

pasar datos desde PHP es fácil, puede generar JavaScript con eso. La otra forma es un poco más difícil: tienes que invocar el script PHP mediante una solicitud de Javascript.

Un ejemplo (utilizando el modelo de registro de evento tradicional para simplificar):

<!-- headers etc. omitted --> 
<script> 
function callPHP(params) { 
    var httpc = new XMLHttpRequest(); // simplified for clarity 
    var url = "get_data.php"; 
    httpc.open("POST", url, true); // sending as POST 

    httpc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    httpc.setRequestHeader("Content-Length", params.length); // POST request MUST have a Content-Length header (as per HTTP/1.1) 

    httpc.onreadystatechange = function() { //Call a function when the state changes. 
    if(httpc.readyState == 4 && httpc.status == 200) { // complete and no errors 
     alert(httpc.responseText); // some processing here, or whatever you want to do with the response 
     } 
    } 
    httpc.send(params); 
} 
</script> 
<a href="#" onclick="callPHP('lorem=ipsum&foo=bar')">call PHP script</a> 
<!-- rest of document omitted --> 

Cualquiera que sea get_data.php produce, que aparecerá en httpc.responseText.El manejo de errores, el registro de eventos y la compatibilidad entre varios navegadores XMLHttpRequest se dejan como ejercicios simples para el lector;)

+2

Vale la pena señalar que solo funciona con URL relativas debido a la misma política de origen: http://en.wikipedia.org/wiki/Same-origin_policy –

2

creo que más o menos acaba de describir Ajax.

(lo siento por la respuesta escueta)

1

Puede pasar datos desde PHP a javascript pero la única manera de obtener datos de Javascript a PHP es a través de AJAX.

El motivo es que puede crear un JavaScript válido a través de PHP, pero para obtener datos en PHP necesitará ejecutar PHP nuevamente, y como PHP solo ejecuta el resultado, necesitará una recarga de página o una consulta asincrónica.

+0

Lo cual no es cierto, como acabo de mostrar, utilizo el método de envío de formularios en el trabajo para obtener datos de JavaScript en el servidor prácticamente todos los días. – Kezzer

+0

¿Con una página recargar o una consulta asíncrona? –

2

Hay algunas formas, la más destacada es obtener datos de formulario u obtener la cadena de consulta. Aquí hay un método que usa JavaScript. Cuando haces clic en un enlace, llamará a los _vals ('mytarget', 'theval') que enviarán los datos del formulario. Cuando la página se publique, puede verificar si los datos de este formulario se han configurado y luego recuperarlos de los valores del formulario.

<script language="javascript" type="text/javascript"> 
function _vals(target, value){ 
    form1.all("target").value=target; 
    form1.all("value").value=value; 
    form1.submit(); 
} 
</script> 

También puede obtenerlo a través de la cadena de consulta. PHP tiene sus funciones globales _GET y _SET para lograr esto, haciéndolo mucho más fácil.

Estoy seguro de que hay probablemente más métodos que son mejores, pero estos son solo algunos de los que vienen a la mente.

EDIT: Basándose en esto desde lo que han dicho usando el método anterior tendría una etiqueta de ancla como

<a onclick="_vals('name', 'val')" href="#">My Link</a> 

Y luego, en su PHP puede obtener datos de la página

$val = $_POST['value']; 

Por lo tanto, cuando haga clic en el enlace que usa JavaScript, publicará los datos del formulario y, cuando la página los publique a partir de este clic, podrá recuperarlos del PHP.

7

Usaría JSON como formato y Ajax (realmente XMLHttpRequest) como el mecanismo cliente-> servidor.

0

la otra manera de intercambiar datos de php para Javascript o viceversa es mediante el uso de las cookies, puede guardar las cookies en PHP y leído por el javascript, para esto usted no tiene que utilizar formas o ajax

2

Usar cookies es una manera fácil. Puede usar jquery y un pluging como jquery.cookie o crear uno propio. usando jQuery + jquery.cookie, por ejemplo

<script> 
    var php_value = '<?php echo $php_variable; ?>'; 

    var infobar_active = $.cookie('php_value'); 
    var infobar_alert = any_process(infobar_active); 

    //set a cookie to readit via php 
    $.cookie('infobar_alerta', infobar_alerta); 

    </script> 

    <?php 

    var js_value = code to read a cookie 

    ?> 

he encontrado este útil del lado del servidor y los marcos híbridos: http://www.phplivex.com/ http://www.ashleyit.com/rs/

He estado usando secuencias de comandos RSJS de Ashley para actualizar los valores de HTML sin ningún problema durante mucho tiempo hasta que conocí a JQuery (ajax, carga, etc.)

7

Me encontré con un problema similar el otro día. Diga, quiero pasar datos del lado del cliente al servidor y escribir los datos en un archivo de registro. Aquí está mi solución:

Mi sencillo código del lado del cliente:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script> 
    <title>Test Page</title> 
    <script> 
    function passVal(){ 
     var data = { 
      fn: "filename", 
      str: "this_is_a_dummy_test_string" 
     }; 

     $.post("test.php", data); 
    } 
    passVal(); 
    </script> 

</head> 
<body> 
</body> 
</html> 

Y el código php en el lado del servidor:

<?php 
    $fn = $_POST['fn']; 
    $str = $_POST['str']; 
    $file = fopen("/opt/lampp/htdocs/passVal/".$fn.".record","w"); 
    echo fwrite($file,$str); 
    fclose($file); 
?> 

Espero que esto funcione para usted y los futuros lectores!

+0

justo lo que necesitaba, ¡gracias! –

+0

Tengo los siguientes errores. ¿Alguien sabe la solución? (índice): 77 Unbeught ReferenceError: $ no está definido en passVal ((index): 77) -for-> $ .post ("test.php", data); at (index): 79 -for-> passVal(); – oOEric

+0

Solución encontrada: agregue la

  • 11. Manera eficiente de pasar variables de PHP a JavaScript
  • 12. Cadena a byte [] y viceversa?
  • 13. ¿Cómo convertir POJO a JSON y viceversa?
  • 14. ¿Llamar a VBScript desde JavaScript o viceversa?
  • 15. Cómo pasar datos a BroadcastReceiver?
  • 16. Pasar tipos de datos de Java a C (o viceversa) usando JNI
  • 17. Pasar datos de formulario HTML a Javascript Función
  • 18. Pasando enteros a int y viceversa
  • 19. Convierta una secuencia de secuencias a un diccionario y viceversa
  • 20. Pasar información de javascript a la aplicación django y volver
  • 21. Mejores prácticas para pasar datos de asp.net-mvc a javascript
  • 22. Conversión de NSString a NSData y viceversa
  • 23. Conversión de registros a listas (y viceversa)
  • 24. C# convierte entero a hexadecimal y viceversa
  • 25. converting boost shared_ptr a void * y viceversa
  • 26. PHP y Codeigniter: ¿cómo pasar parámetros a un modelo?
  • 27. ¿Pueden pasar datos PHP y C++ entre ellos?
  • 28. Pasar una matriz PHP multidimensional para Javascript
  • 29. Pasar de C# a php
  • 30. PHP - pasar variables a clases