在cakePHP中调用ajax时使用action url的最佳实践

我在cakePHP应用程序中使用ajax和jQuery。
我的javascript函数放在一个javascript文件中。

现在在我的本地系统中,文件保存在“/ sample”目录中,因此我调用该函数时的路径将是

在ajax.js

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

但托管后,url将成为

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

在cakePHP我们$html->url生成url
但由于此代码在js文件中,我无法使用该function

我不希望在托管之前手动更改所有ajax操作URL

您可以在您的蛋糕应用程序的主模板中创建一个可在整个应用程序中使用的全局 javascript变量。 确保它存在,因为你也做任何JS包含。

  ...  ...  

现在,您可以从MVC框架应用程序中的任何视图文件中执行此类操作。

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

我正在更新Paul Dragoonis的答案以反映最新的CakePHP版本(2.2)。

在你的布局文件中,用CakePHP的JSHelper设置JavaScript变量: Js->set('url', $this->request->base); ?> Js->set('url', $this->request->base); ?> ,其中$this->request是CakeRequest的一个实例,并提供有关当前请求的信息。

在上面的行之后,用Js->writeBuffer(); ?>写入缓冲区Js->writeBuffer(); ?> Js->writeBuffer(); ?>

然后,您可以使用app.url在JavaScript中访问此变量。

@irtiza你的答案是值得赞赏的,但对于cakephp最新版本3.x这将工作否则你将得到路由错误。

 ulr:' 'controllername', 'action' => 'actionname')); ?>' 

在回复Paul Dragoonis时,如果您使用子文件夹,则可以使用$this->webroot

使用

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

会输出;

 /Users/all 

在js

 $.post({url : " 'Users', 'action' => 'all')); ?>"})