2013-03-20 137 views
1

我目前在我的應用程序中使用多個控制器中的ajax。我使用jQuery支持的版本實現了ajax功能。CakePHP和Ajax請求url

$.ajax({ 
    url:'getCountries', 
    type: "POST", 
    dataType: "html", 
    data:"data=" + result, 
    success: function(data){ 
        //magic... 
     } 
    } 
}); 

從上面的代碼可以看出,這個請求的URL是'getCountries'。 這意味着,如果該請求是從

http://localhost/appname/controllername/methodname 

提出的請求URL將被

​​

然而,如果你使用這個腳本的URL比上面的例子不同,說

http://localhost/appname/controllername/methodname/7 

(就像在編輯視圖中一樣),那麼來自這些URL的ajax調用中的請求url將變爲

http://localhost/appname/controllername/methodname/getCountries 

我怎樣才能讓這個請求的URL會生成全自動基於控制器我目前在?

請注意,APPNAME URL路徑是應用程序的根文件夾的名稱,應該也包括在內,這樣,如果該文件將被運送到不同的服務器/位置的JavaScript鏈接將保持與根文件夾一致也。

+0

那麼,是什麼妨礙你真正使用完整的URI'url'價值? – 2013-03-20 20:57:25

回答

0

我想你應該在你的Ajax調用使用完整路徑,如果你使用多個視圖這個代碼,你可以在某些變量傳遞ControllerName:

$.ajax({ 
     url: http://localhost/appname/<?php echo $controllerName; ?>/getCountries 
     // code 
}); 

在這種情況下,你需要使用視圖或元素文件(帶* .ctp擴展名)以將變量回顯爲JavaScript代碼。或者,您可以在視圖中將其回顯給某個JavaScript變量,並將其傳遞給您的外部* .js腳本文件。

它適用於類似情況下的我。

1

試試這個

$.ajax({ 
url:"<?php echo $this->webroot . $this->params["controller"]; ?>/yourAction" 
}); 

$this->webroot包含路徑到您的根目錄 例如,如果你的應用程序文件夾位於htdocs中/測試 你肥大訪問它使用localhost/test/$this->webroot將包含以下字符串'/test/'

+0

最好通過[HtmlHelper :: url()](http://book.cakephp.org/2.0/en/core-libraries/helpers/html.html#HtmlHelper:url)生成URL,這將會使確保自定義路線也將被考慮在內。即'echo $ this-> Html-> url(array('controller'=>'controllername','action'=>'actionname',0 => $ id),true);'。第二個參數('true')確保生成完整的URL(http://),但如果指向同一個域,則不需要*。 – thaJeztah 2013-03-21 22:37:38

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)); ?>"})