簡體   English   中英

相當於 JavaScript 中 PHP 的 dirname(__FILE__)?

[英]Equivalent of PHP's dirname(__FILE__) in JavaScript?

正如我在標題中已經提到的,我正在尋找一個 JS 函數來獲得與使用此 PHP 代碼相同的結果:

dirname(dirname(__FILE__))

提前致謝!

我認為這是不可能的,因為 php dirname 在本地機器上的 apache 服務器上運行。 它可以訪問文件系統。 但是javascript在瀏覽器層上運行,不能在文件系統上運行。 我認為你應該如何使用ajax和proccess結果你需要它。 我認為這對你來說是最好的解決方案。

我需要一個解決方案來編寫這樣的代碼:

$("#div").load(ROOT_URL + "my/path/to/script.php");

解決方案:一個 PHP 腳本生成一個包含所有需要的 JS 文件的 JS 文件,並將 ROOT_URL 添加到生成文件的頂部:

$js = 'ROOT_URL = "' . ROOT_URL . '"; ' . $js;
file_put_contents("file.js", $js);

現在我也可以在 JS 代碼中使用 ROOT_URL(在 PHP 配置文件中設置)。 我希望我能幫上忙。

您可以讓 PHP 輸出腳本。 是的,沒錯,您可能無法制作 php 處理 js 文件(除非您完全控制服務器)。 不過沒關系。 只需確保 MIME 類型正確,無論是在 PHP 返回的標頭中還是在腳本標記中。 這樣,您可以讓 PHP 在腳本中插入您想要的任何值,包括它自己的路徑。

在 script.php 中:

header("Content-type: text/javascript");
echo 'var myvar = '.$something;
//where $something can be $_SERVER['REQUEST_URI'], __FILE__ or whatever you need.
//You could even use information from session variables, or query the database.
//In fact, this way you can have GET parameters in your javascript.
//Make sure you are not creating a vulnerability with the exposed information.

//Then put the rest of the script as usual. You could even include it*.

*:包括

在 HTML 中:

<script type="text/javascript" src="script.php"></script>

是的,我知道我在重復 MIME 類型,這樣做是為了最大限度地提高瀏覽器兼容性。

在瀏覽器 Javascript 中沒有__FILE__的類似物; 該代碼無法直接訪問加載它的 URL。 但是通過某些假設,您可以弄清楚,就像這里的答案一樣。

一旦您獲得了腳本的 URL(我假設在下面稱為scriptURL的變量中),您就可以着手查找祖父 URL。 這對於 URL 來說可能會變得棘手,因此在開始字符串處理之前,讓 Javascript 的 URL 精通位為您解析 URL 並僅獲取路徑名組件可能是最安全的:

var a = document.createElement('a')
a.href = scriptURL
var scriptPath = a.pathname

不幸的是,它歸結為字符串操作; 這是一個有點笨拙的解決方案:

var components = scriptPath.split(/\//)
while (components.length > 0 && !components[components.length-1])
    components.length -= 1;
var twoDirsUp = components.slice(0,components.length-2).join('/')

然后你可以反向使用錨元素技巧將結果轉換回完整的 URL:

a.pathname = twoDirsUp;
var grandParentUrl = a.href

為什么不從絕對 URL 加載您想要的內容?

如果你有你的代碼塊: /my/script/to/load.js瀏覽器將加載正確的文件,如果你在yoursite.com或類似yoursite.com/a/b/c/d/e/f

有點題外話,但如果你只是想獲得類似的dirname($_SERVER['REQUEST_URI']) javascript,你可以這樣做

window.location.href.substr(0, window.location.href.length - window.location.href.split('/').pop().length)

我使用類似的東西來擺脫 javascript 中的路徑

 var __DIR__ = window.location.pathname.match('(.*\/).*')[1] + 'NameOfThisFolder';

第一的

window.location.pathname.match('(.*\/).*')[1]

返回沒有文件名或其他內容的當前路徑。

rootFolder/folder1/folder2/

然后我添加這個文件夾的名稱('NameOfThisFolder')。

通過這種方式,我可以在當前頁面中從一個頁面中進行 ajax 請求,該頁面從 ajax 請求中依次調用,而無需擔心路徑

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM