Esto es, en esencia, lo que AJAX es para. Su página se carga y agrega un evento a un elemento. Cuando el usuario hace que se desencadene el evento, digamos haciendo clic en algo, su Javascript usa el XMLHttpRequest object para enviar una solicitud a un servidor.
Después de que el servidor responde (presumiblemente con salida), otra función/evento de Javascript le da un lugar para trabajar con esa salida, incluyendo simplemente pegarlo en la página como cualquier otra pieza de HTML.
Puedes hacerlo "a mano" con Javascript simple, o puedes usar jQuery. Dependiendo del tamaño de su proyecto y su situación particular, puede ser más simple simplemente usar Javascript plano.
Llanura Javascript
En este ejemplo muy básico, nos envíe una solicitud de myAjax.php
cuando el usuario hace clic en un enlace. El servidor generará algunos contenidos, en este caso, "¡mundo hello!". Pondremos en el elemento HTML con el id output
.
El javascript
// handles the click event for link 1, sends the query
function getOutput() {
getRequest(
'myAjax.php', // URL for the PHP file
drawOutput, // handle successful request
drawError // handle error
);
return false;
}
// handles drawing an error message
function drawError() {
var container = document.getElementById('output');
container.innerHTML = 'Bummer: there was an error!';
}
// handles the response, adds the html
function drawOutput(responseText) {
var container = document.getElementById('output');
container.innerHTML = responseText;
}
// helper function for cross-browser request object
function getRequest(url, success, error) {
var req = false;
try{
// most browsers
req = new XMLHttpRequest();
} catch (e){
// IE
try{
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
// try an older version
try{
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
return false;
}
}
}
if (!req) return false;
if (typeof success != 'function') success = function() {};
if (typeof error!= 'function') error = function() {};
req.onreadystatechange = function(){
if(req.readyState == 4) {
return req.status === 200 ?
success(req.responseText) : error(req.status);
}
}
req.open("GET", url, true);
req.send(null);
return req;
}
El HTML
<a href="#" onclick="return getOutput();"> test </a>
<div id="output">waiting for action</div>
El PHP
// file myAjax.php
<?php
echo 'hello world!';
?>
Pruébelo: http://jsfiddle.net/GRMule/m8CTk/
Con una biblioteca de Javascript (jQuery y otros)
Podría decirse que es una gran cantidad de código Javascript. Puedes acortar eso apretando los bloques o usando más operadores de lógica concisa, por supuesto, pero todavía hay muchas cosas sucediendo allí. Si planeas hacer mucho de este tipo de cosas en tu proyecto, es mejor que tengas una biblioteca de JavaScript.
Usando el mismo HTML y PHP desde arriba, esta es la secuencia de comandos completa (con jQuery incluido en la página). He reforzado el código un poco para ser más consistente con estilo general de jQuery, pero usted consigue la idea:
// handles the click event, sends the query
var function getOutput() {
$.ajax({
url:'myAjax.php',
complete: function (response) {
$('#output').html(response.responseText);
},
error: function() {
$('#output').html('Bummer: there was an error!');
}
});
return false;
}
Pruébelo: http://jsfiddle.net/GRMule/WQXXT/
No se apresure a cabo simplemente para jQuery aún: agregar cualquier biblioteca aún agrega cientos o miles de líneas de código a su proyecto con la misma seguridad que si las hubiera escrito. Dentro del archivo de la biblioteca jQuery, encontrará un código similar al del primer ejemplo, más un mucho más. Eso puede ser algo bueno, puede que no. Planifique y considere el tamaño actual de su proyecto y la posibilidad futura de expansión y el entorno o plataforma objetivo.
Si esto es todo lo que necesita hacer, escriba el javascript simple una vez y listo.
Documentación
simplemente no hay, no hay manera de hacer esto, excepto una llamada al método requerido usando ajax. – TheVillageIdiot
Ya sabe: PHP se ejecuta en el servidor, pero ¿JS en el cliente? Esto no puede funcionar de esta manera. – KingCrunch
espera de espera, no es ' Php query (" hello "); ?> 'Presentado por php cuando la página está cargada? si es así, entonces puede obtener la salida de 'query (" hello ")' en la función js. – TheVillageIdiot