Cita: ¿qué hace que un script AJAX devuelva lo que se le indica que devuelva? ¿Es el echo?
Cualquier cosa que genera una salida.
¿Qué es una salida?
Cualquier contenido que se envía como respuesta al cliente que hace la petición.
Sí, echo es una forma de "imprimir contenido y producir salida", al igual que print_r(), o die(), etc.
Realmente "echo" es la forma más primitiva y básica de imprimir contenido, aunque existen muchas más: stream, buffers, etc.
Cita: ¿En el momento que el script encuentra un echo, en ese momento el script entiende que el contenido del echo es lo que se tiene que devolver y el script ya no avanza?
No.
El intérprete de PHP ejecutará todo el código hasta el final del mismo, y sólo hasta el final es que enviará todo lo que esté en su "bufffer" de salida.
Te sugiero que estudies un poco de cómo funciona HTTP.
Cliente (hace la petición):
Cita: GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host:
www.tutorialspoint.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Servidor (devuelve una respuesta):
Cita: HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
- La primer linea siempre incluirá el verbo, path y protocolo usado de la petición, la respuesta incluye el protocolo, status y mensaje.
- Las siguientes lineas (antes de la linea en blanco) representan las cabeceras, tipo de contenido, cookies, etc.
- Después de la linea en blanco comienza la respuesta (buffer de salida).
Justamente "imprimir" algo (ej. echo) añade contenido al buffer de salida, cuando el script se finaliza entonces se construye todo el mensaje de respuesta.
Precisamente no entender cómo funciona esto produce muchos problemas, por ejemplo, enviar cabeceras cuando ya se comenzó a imprimir en el buffer de salida.
¿Se entiende?
No puedes enviar cabeceras si ya comenzaste a generar la respuesta: básico.
Ahora, repito lo mismo de hace tiempo: no importa cómo hagas la petición: en la consola, navegador, javascript (ajax), etc.
Lo importante es entender que siempre se ejecutará de la misma forma la petición en el servidor, así que realmente es indiferente si usaste ajax o no.