2010-02-01 98 views
0

我是試圖在視圖中執行一個AJAX請求,用戶提供了一些輸入,發送到服務器與AJAX和它應該去的功能是路由與CodeIgniters路由。CodeIgniter路由問題。 (追加ajax路由到現有的url)

這是我目前在提出請求時的觀點。

http://localhost:8888/companies/list 

在我的路線配置我已經設置如下這條路線來處理Ajax請求,這應該可以來自任何觀點,仍然能夠去我指定的路線。

$route['test_ajax'] = "ajax/test_ajax"; 

因此請求應該去「Ajax」的-controller和使用功能「test_ajax」,這應該能讓POST-URL這個樣子。

POST http://localhost:8888/test_ajax 

但不是我所得到的是我站在當前的URL,路徑我指定附加到URL完全崩潰從AJAX請求我的反應,因爲它甚至不走的很近到它應該的功能。我得到的POST-url看起來像這樣。

POST http://localhost:8888/companies/test_ajax 

注意/ companies的參數已被刪除。參數/列表在某處丟失了,但是如果我在列表後面添加了尾部的斜槓,我也會在URL中獲得列表參數。

所以剛纔發生的事情是,POST試圖去公司控制器和查找這是在Ajax的控制器,而不是定義在公司控制器的功能test_ajax。無論我在哪個網址,都會發生此錯誤,並始終遵循相同的模式。它會將我的route-URL附加到現有的URL上,而不是正確地路由。

所以這可能是導致路由到這樣的行爲,是否有意外真實啓用或任何東西任何設置?因爲我知道在以前的項目中我已經有數百次的工作。

在此先感謝。

回答

6

這是因爲您的Javascript正在使用當前目錄作爲基礎,並將AJAX URL添加到它。因爲你(至少在客戶端)在公司目錄中,它將你的URL附加到這個上。

的解決方案,如果你的JavaScript是內聯的,是隻使用BASE_URL()PHP函數wihtin代碼...

var url = '<?= base_url(); ?>test_ajax/'

如果你的JavaScript是不是內聯,你可以聲明全局在使用PHP函數你的HTML文檔的頂部變量...

var BASE_URL = '<?= base_url(); ?>'

而且在你的JavaScript在其他地方使用它...

var url = BASE_URL + 'test_ajax/'

或者,你可能只是硬編碼的基本URL,但可能得到真正的凌亂真正的快。

+0

要在CodeIgniter中使用'base_url',請確保您已加載URL助手。 – beseku 2010-02-01 08:04:43

+0

這有效,但僅僅是因爲我完全忽略了路由,只是使用它的常規URL。我想保留所有網址的路由結構。但你肯定有一點。 – 2010-02-01 08:11:37

+0

@beseku,如果我把所有的js放在外部的js文件中,我怎樣才能使用php代碼? – palAlaa 2012-11-25 11:16:06

1

原來,由於沒有標題斜槓,CodeIgniter將其解釋爲相對鏈接。 CodeIgniter用戶指南指出不應在路由配置中寫入標題或結尾斜槓。

什麼解決了這個問題,但在java-URL中添加了一個標題斜槓。

$.ajax({ 
    url: "/test_ajax", 
    type: "POST", 
    data: data, 
    success: function(data){ 
     console.log(data); 
    } 
}); 

這會強制CI將此解釋爲絕對URL,併爲我提供我正在尋找的URL。

POST http://localhost:8888/test_ajax 
+0

請注意,這意味着如果您將應用程序移出根目錄,那麼您的JS將會中斷。這就是base_url和site_url助手的全部要點。 – beseku 2010-02-03 02:57:01

+0

它不會因爲路由而破壞,並且保持在CI結構中。如果我將其移動到另一個URL,我將只獲得 http://www.othersite.com/test_ajax 路由仍將在CI內路由並找到路徑/ test_ajax。我已經嘗試過了,它可以工作。但僅僅是因爲CI使用了你正在談論的base_url設置。不過,再次感謝您的幫助! – 2010-02-03 08:06:01