我目前使用ajax在我的应用程序中的多个控制器。我使用jQuery支持的版本实现了ajax功能。
$.ajax({
url:'getCountries',
type: "POST",
dataType: "html",
data:"data=" + result,
success: function(data){
//magic...
}
}
});
从上面的代码可以看到,这个请求的url是'getCountries'。这意味着如果请求是从
发出的http://localhost/appname/controllername/methodname
请求url将是
http://localhost/appname/controllername/getCountries
但是,如果您使用此脚本的url与上面的示例不同,则输入
http://localhost/appname/controllername/methodname/7
(与编辑视图中一样),那么来自这些url的ajax调用中的请求url将更改为
http://localhost/appname/controllername/methodname/getCountries
我怎么能使它,使请求url将自动生成取决于我目前在控制器?
请注意,url路径中的appname是应用程序根文件夹的名称,它也应该包含在内,以便如果文件将被传输到不同的服务器/位置,javascript链接也将与根文件夹保持一致。
试试这个
$.ajax({
url:"<?php echo $this->webroot . $this->params["controller"]; ?>/yourAction"
});
$this->webroot
包含您的web浏览器的路径例如,如果你的应用文件夹位于htdocs/test您可以使用localhost/test/
访问$this->webroot
将包含以下字符串'/test/'
我认为你应该在Ajax调用中使用全路径如果你在多个视图中使用这段代码你可以在一些变量中传递ControllerName
$.ajax({
url: http://localhost/appname/<?php echo $controllerName; ?>/getCountries
// code
});
在这种情况下,您需要使用视图或元素文件(带*)。ctp扩展名)将变量回显到JavaScript代码。或者,你也可以将它回显到视图中的某个JavaScript变量中,并将其传递给外部*.js脚本文件。
use
echo Router::url(array('controller' => 'controllername', 'action' => 'methodname',7));
将输出;
/controllername/methodname/7
在js $.post({url : "<?php echo Router::url(array('controller' => 'controllername', 'action' => 'methodname',7)); ?>"})