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

时间:2010-07-28 11:28:02

标签: jquery ajax cakephp url-rewriting

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

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

在ajax.js

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

但托管后,网址将变为

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

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

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

5 个答案:

答案 0 :(得分:23)

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

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

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

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

答案 1 :(得分:6)

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

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

在上面一行之后,使用<?php echo $this->Js->writeBuffer(); ?>

写入缓冲区

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

使用

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

将输出;

/Users/all

在js

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