我目前在我的应用程序中使用多个控制器中的ajax。我使用jQuery支持的版本实现了ajax功能。
$.ajax({
url:'getCountries',
type: "POST",
dataType: "html",
data:"data=" + result,
success: function(data){
//magic...
}
}
});
从上面的代码中可以看出,此请求的url是'getCountries'。 这意味着如果请求来自
http://localhost/appname/controllername/methodname
请求网址将是
http://localhost/appname/controllername/getCountries
但是,如果您使用此脚本的网址与上面的示例不同,请说
http://localhost/appname/controllername/methodname/7
(就像在编辑视图中一样),那些来自这些网址的ajax调用中的请求网址将更改为
http://localhost/appname/controllername/methodname/getCountries
如何根据我目前使用的控制器自动生成请求网址?
请注意,网址路径中的 appname 是应用程序根文件夹的名称,也应该包含它,以便在将文件传输到其他服务器/位置时javascript链接也会与根文件夹保持一致。
答案 0 :(得分:1)
试试这个
$.ajax({
url:"<?php echo $this->webroot . $this->params["controller"]; ?>/yourAction"
});
$this->webroot
包含您的webroot的路径
例如,如果您的app文件夹位于htdocs / test中
并且您使用localhost/test/
$this->webroot
对其进行访问将包含以下字符串'/test/'
答案 1 :(得分:0)
我认为你应该在Ajax调用中使用完整路径,如果你在多个视图中使用这个代码,你可以在一些变量中传递ControllerName:
$.ajax({
url: http://localhost/appname/<?php echo $controllerName; ?>/getCountries
// code
});
在这种情况下,您需要使用View或Element文件(扩展名为* .ctp)将变量回显到JavaScript代码。或者,您可以将其回显到视图中的某个JavaScript变量,并将其传递给外部* .js脚本文件。
在类似情况下,它适用于我。
答案 2 :(得分:0)
使用
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)); ?>"})