2012-08-31 36 views
2

我正在使用cakephp並希望使用jQuery.ajax發佈到我的服務器。問題是jQuery的$.ajax追加協議和主機名,但也包括當前的控制器,所以我不能更改我粘貼的控制器。

有沒有辦法改變$.ajax中的url:參數?這裏是我的示例郵編:

$.ajax({ 
     url: 'controller/action', 
     type: 'post', 
     data: $('#form_data').serialize(), 
     dataType: 'json', 
     success: function(json) { 
      console.log(json); 
     } 
    }); 
+1

你在尋找$ .post或$ .ajax嗎?在你的問題中,你編寫$ .post,但你的示例代碼使用$ .ajax – kannix

+0

你不能在外部變量中定義url並調用它; 'var url ='http:// foo/bar''然後'$ .post(url,data,callback)'? – Vishal

+0

讓我試試這個快速,是的我的壞@kannix,感謝您的糾正。 – mauzilla

回答

1

創建一個文件讓我們假設'site_constants.php'包含app/Config文件夾中的一些常量變量。定義以下常量進去:

<?php  
define('HTTP_HOST', "http://" . $_SERVER['HTTP_HOST'].'/'); 
if(HTTP_HOST == 'localhost' || HTTP_HOST == '127.0.0.1') 
{ 
    define('SITE_URL', HTTP_HOST.'app_folder_name/'); 
} 
else 
{ 
    define('SITE_URL', HTTP_HOST); 
} 

包括在app/Config/bootstrap.php

require_once('site_constants.php'); 

定義JS變量不變到您的主要佈局文件:

<script type="text/javascript"> 
var SITE_URL = '<?php echo SITE_URL?>'; 
</script> 

現在你可以在任何地方使用它到您的網站。這也是一個動態的,你不需要改變每個Ajax方法的網址。

$.ajax({ 
    url: SITE_URL+'controller/action', 
    type: 'post', 
    data: $('#form_data').serialize(), 
    dataType: 'json', 
    success: function(json) { 
     console.log(json); 
    } 
}); 

這可能看起來漫長的過程來處理這個任務,但一旦完成,它會幫助你在很多意義。

這裏的優勢是:

  1. 您可以輕鬆地定義一些常量(像任何文件路徑等)。
  2. 你可以把你所有的ajax代碼放到外部的JS文件中。
  3. 您可以直接將其部署到任何服務器上,而無需更改常量,也可以在本地主機上完美工作。
  4. 遵循標準慣例等
+0

真棒的想法。我正在嘗試做同樣的事情。謝謝@阿倫 –

1

只要把你要張貼在$.post設置的URL部分中的確切/更具體的網址...

$.ajax({ 
    url: 'http://host/controller/action', 
    type: 'post', 
    data: $('#form_data').serialize(), 
    dataType: 'json', 
    success: function(json) { 
     console.log(json); 
    } 
}); 
0

在CakePHP中,你可以這樣做:

$.ajax({ 
     url: '<?php echo $this->webroot; ?>controller/action', 
     type: 'post', 
     data: $('#form_data').serialize(), 
     dataType: 'json', 
     success: function(json) { 
      console.log(json); 
     } 
    }); 

如果你的Ajax代碼是在js文件,那麼你可以這樣做:在你的佈局/ default.thtml中文件 :

<script type="text/javascript"> 
var webroot = "<?php echo $this->webroot; ?>"; 
</script> 

然後在包含AJAX的js文件,你可以用js變量Webroot公司

$.ajax({ 
     url: webroot + 'controller/action', 
     type: 'post', 
     data: $('#form_data').serialize(), 
     dataType: 'json', 
     success: function(json) { 
      console.log(json); 
     } 
}); 

您的意思是類似的東西

+0

如果'js'代碼不是內聯的,並且從外部的'.js'文件加載的話,那該怎麼辦? – Vishal

1

試試這個

$.ajax({ 
    url: '/controller/action', 
    type: 'post', 
    data: $('#form_data').serialize(), 
    dataType: 'json', 
    success: function(json) { 
     console.log(json); 
    } 
}); 

你看到區別?如果您在網址前加「/」(斜線),它會被附加到您的域名,如果沒有,它會被添加到您當前的URL中。