2010-07-28 10 views
5

Estoy usando ajax con jQuery en mi aplicación cakePHP.
y mi función javascript se coloca dentro de un archivo javascript.mejor práctica para usar la url de acción al llamar a ajax en cakePHP

ahora en mi sistema local los archivos se guardan en el directorio "/ muestra" para que el el camino mientras llamo a la función será

en ajax.js

$.post({url : "/sample/controller/action"}) 

pero después de lo hospeda el url se convertirá en

$.post({url : "/mydomain.com/controller/action"}) 

en CakePHP que $html->url a generar URL
pero ya que este es el código de archivo js I Ca No utilice esa función

i no quieren cambiar las direcciones URL de acción todos ajax manualmente antes de recibir a

Respuesta

23

Lo que hay que hacer es en su plantilla principal para su aplicación torta crear un mundial variable javascript que puede usarse en toda su aplicación. Asegúrese de que exista antes de que haga cualquier JS incluye también.

<head> 
    ... 
    <script type="text/javascript">var myBaseUrl = '<?php echo $html->url; ?>';</script> 
    ... 
    <script type="text/javascript" src="mycustomJSfile.js"> 
    ... 
</head> 

Ahora puede hacer cosas como esta desde cualquier archivo de vista que tenga en su aplicación MVC framework.

$.post({url: myBaseUrl + 'controller/action'}); 
+0

Lo hago para cada aplicación web que escribo utilizando cualquier marco. Es aún más útil si está usando Smarty y necesita la baseUrl en javascript. Tendría que hacer {/ literal} {$ baseUrl} {/ literal} que es un PITA real. La solución anterior lo resuelve muy bien. –

+5

Esta es la respuesta correcta, pero no funcionó para mí.Puede ser porque estoy usando Cake 2 y esta solución era para una versión anterior, sin embargo. No obstante, el código que tuve que usar para hacer que funcione en Cake2 fue ' ' – Joseph

+0

Y para CakePHP 3, utilicé' var appBaseUrl = ' Url-> build ('/', true); ?> '; ' – XerXes

1

en respuesta a Paul Dragoonis puede utilizar $this->webroot si utiliza subcarpetas.

6

Estoy actualizando la respuesta de Paul Dragoonis para reflejar la última versión de CakePHP (2.2).

En su archivo de diseño, establezca la variable de JavaScript con JSHelper de CakePHP: <?php echo $this->Js->set('url', $this->request->base); ?>, donde $this->request es una instancia de CakeRequest y proporciona información sobre la solicitud actual.

Después de la línea anterior, escriba el búfer con <?php echo $this->Js->writeBuffer(); ?>.

Luego, puede acceder a esta variable en JavaScript con app.url.

1

uso

salida
echo Router::url(array('controller' => 'Users', 'action' => 'all')); 

Will;

/Users/all 

en js

$.post({url : "<?php echo Router::url(array('controller' => 'Users', 'action' => 'all')); ?>"}) 
3

@irtiza su respuesta se aprecia pero para cakephp última versión 3.x esto funcionará de lo contrario obtendrá error de encaminamiento.

ulr:'<?php echo \Cake\Routing\Router::url(array('controller' => 
'controllername', 'action' => 'actionname')); ?>' 
Cuestiones relacionadas