2010-07-13 65 views
1

我在一個網站上工作,並有3個不同的分支機構。典型的dev-> stage->生產情況。

在3周不同的網址全部3運行:

PROD:http://www.domain.com

階段:http://www.domain.com/stage

開發:http://www.domain.com/dev

,所以我想有通用代碼在全部3上運行而不對文件路徑進行任何修改。

爲了達到這個目的,我只需要設置base_path var set,爲任何CodeIgniter安裝配置這個特定的分支。

var base_url = "<?=base_url();?>"; // This sets base_url accordingly. 

$.post(base_url + 'login/ajaxLogin', { // See note below 
     login_email: $('#login_email').val(), 
     login_pass: $('#login_pass').val(), 
     }, 
     function(data) { 
      if(data == 'true') { 
      window.location.href = base_url; 
      } else { 
      $('h2').replaceWith('<h2 style="color:#b81900;">Login Failed</h2>'); 
      return false; 
      } 
}); 

上面的代碼在Chrome中工作正常。但它在Safari和Firefox中不起作用。 在Firefox它靜靜地失敗,並在Safari我得到"Unable to load resource: cancelled"

注意:如果我刪除base_url和剛剛成立的腳本路徑/login/ajaxLogin/dev/login/ajaxLogin/stage/login/ajaxLogin一切完美。

看來我可能會遇到跨域腳本限制,但我不確定爲什麼?

是的,我熟悉Same Origin Policy是的,我已經看到了這對jQuery的網站:

由於瀏覽器的安全限制,大多數「Ajax」的請求都受到同樣的原產地政策 ;該請求無法成功檢索來自不同域,子域, 或協議的數據。

如果帶有jQuery.post()的請求返回錯誤代碼,它將自動失敗,除非 腳本也調用了全局方法.ajaxError()

以上都不適用於我的情況,因爲我住在我的域名,所以我不完全確定發生了什麼,但我真的很想找到解決此問題的解決方法。

+0

我要問第一個愚蠢的問題,但是base_path函數在所有實例中返回相同的路徑嗎? – jerebear 2010-07-13 02:50:45

+2

首先,可能需要查找此PHP實際生成的Javascript,其次,使用Chrome開發人員工具或Firebug查找失敗請求的URL。 – Matchu 2010-07-13 02:55:10

+0

'base_url()'爲url添加了一個斜槓,所以你可能會得到類似'http:// url.com // stage/login/ajaxLogin'這樣的東西。正如@Matchu所說,檢查看看哪些URL正在生成。 – stormdrain 2010-07-13 03:22:27

回答

1

我對CodeIgniter不熟悉,但除非該函數將值包含在引號中,否則您需要自行包裝它。

var base_path = "<?= base_path(); ?>"; 
+0

良好的通話。甚至沒有發現它是一個字符串。這可能是問題! – jerebear 2010-07-13 03:06:01

+0

我的歉意,我已經在引號中,我只是沒有複製/粘貼它。 'var base_url =「<?= base_url();?>」;' – solefald 2010-07-13 03:13:33