2010-10-19 22 views
5

Creo que es posible ejecutar una función de script java dentro de PHP, pero ¿seguirá siendo del lado del servidor y no del lado del cliente? ¿Puedo, dentro de PHP, llamar a una función .js, pasarle algunos argumentos y hacer que vuelva al PHP que lo llamó?Ejecutando javascript dentro de PHP

Una secuencia de comandos que quiero usar retornos XML, y yo quiero conseguir las entradas del usuario usando PHP, pasarlas a los Js funcionar que residen en el servidor, luego tomar el XML devuelto y analizarlo de nuevo en el PHP parte.

Lo pregunto porque veo gente comentando que, debido a que .js es del lado del cliente y PHP es del lado del servidor, no se llevan bien. Esperaba que al ejecutar la función .js en el PHP, pudiera falsificar la llamada .js como procedente de la máquina local (el servidor).

¡Gracias por cualquier información!

+0

La respuesta corta es no. Creo que podría necesitar cambiar un poco el diseño de su aplicación. ¿Podría implementar la función que devuelve XML en PHP (o hay un equivalente de PHP que logra lo que hace el JS)? –

+0

PHP no tiene un intérprete de Javascript. [El lado del servidor Javascript] (http://en.wikipedia.org/wiki/Server-side_JavaScript) existe, pero ¿no sería más fácil simplemente reimplementar la función JS en su código PHP? –

+0

El Javascript es tercero. Ojalá hubiera una versión de PHP. – Robolulz

Respuesta

13

No puede llamar a JavaScript desde el propio PHP. PHP no es un motor de JavaScript.

Sin embargo, no es una extensión PECL para la interconexión con V8:

y se puede interconectar con un (serverside) motor de JavaScript. Echar un vistazo a node.js y

+0

Parece interesante. Voy a echarle un vistazo. Gracias. – Robolulz

+0

Lo que tengo es una aplicación de búsqueda de archivos que se ejecuta para mi servidor de almacenamiento y tiene una interfaz de Javascript. El front-end web para el servidor es actualmente PHP, como debería ser. Solo quería incluir la capacidad de búsqueda en el front-end web. – Robolulz

+0

@Robolulz por web-front end ¿te refieres a la parte que se ejecuta en el navegador? Si es así, ¿por qué no llama a la interfaz JS del servidor de almacenamiento directamente desde el navegador en lugar de desde PHP? Además, ¿el servidor de almacenamiento es, por casualidad, un CouchDB u otro NoSQL DB? – Gordon

2

que podría si has encontrado un lado del servidor Javascript intérprete, que se podría llamar a. No he usado PHPJS (http://phpjs.berlios.de/) pero podría funcionar.

Parece que su mejor opción es reemplazar el código js, ​​porque lo que está haciendo simplemente suena como una mala idea.

0

Esto realmente no es tan difícil como parece.

  1. La página se representa inicialmente con PHP/HTML.
  2. El usuario ingresa información en los campos del formulario.
  3. Utilice la función Serializar de Jquery para obtener los datos en un formato (javascript var) que pueda pasar.
  4. Pase datos serializados a su Javascript para obtener el XML deseado
  5. Enviar los resultados XML devueltos a PHP a través de AJAX.
  6. PHP toma XML enviado como POST de Jquery y hace su magia.

FYI, existe una solución relativamente poco conocida para AJAX a través de PHP llamada XAJAX. Probablemente no te ayude demasiado en esta situación, pero te permite hacer llamadas AJAX a las funciones de PHP. Si bien es cierto que PHP no tiene un intérprete de JavaScript, XAJAX y Ajax de Jquery son excelentes maneras para que el código de front-end interactúe con la funcionalidad del lado del servidor.

1

Creo que bpeterson lo clavó. Pero si no se siente cómodo con AJAX, o simplemente necesita un poco más de detalles.

Primero - Ponga una acción en un botón (enviar formulario o de lo contrario). action = "javascript: yourJsFunc()". Es probable que este elemento se muestre a través de echos en su PHP, o simplemente esté escrito estáticamente.

Siguiente - Obtenga los parámetros que necesita. Sugiero métodos jQuery o DOM, es decir. $ ('# blah') o document.getElementById ('blah'). val();

Luego - Configure las entradas ocultas para almacenar su respuesta, forzar una solicitud de envío o hacer una solicitud ajax. ¡Estás en PHP con tus valores!

function yourJsFunc() 
{ 
    var arg1 = $('#arg1').val //or equivalent DOM method 
    var arg2... 
    //serialize these if necessary 
    var yourXML = outsideJSFunction(arg1, arg2, etc); 

    $('#invisibleDiv').html('<form id="yourForm" method="POST"><input type="hidden" name="x" val="'+yourXML+'" /></form>'); 
    $('#yourForm').submit(); 
     //ALTERNATIVELY $.get("other.php", {myXml : yourXml}, function() {//whatever}); 
}