2011-11-29 74 views
2

如何構建open()調用的url部分,以便在不知道用戶上傳腳本的位置的情況下查找正確文件夾中的腳本? 例如,假設我們有一個名爲ajax.js的javascript文件和一個名爲script.php的php腳本。我們調用open()這樣的:AJAX獲取url相對於腳本

open("GET", "<path>/script.php", true); 

而且lests說ajax.js和的script.php已經uploadeded到http://somedomain.com/scripts/ajax和進口ajax.js HTML文檔的URL是http://somedomain.com/news/index.html。 這將是很容易說

open("GET", "script.php", true); 

因爲script.php的是在同一個目錄中ajax.js但路徑是相對於進口ajax.js所以瀏覽器會尋找/somedomain.com文檔/news/script.php。

我需要能夠建立正確的網址,而無需確切知道ajax腳本的上傳位置,以便於安裝,而無需每次都更改網址。 我該怎麼做?

+0

'open(「GET」,「/script.php」,true);''將始終在網站的根文件夾中查找文件。 –

回答

0

有幾件事情要注意...

1)如果你到腳本的URL直接檢查介質類型/ MIME是是text/JavaScript的?如果不是這樣,不管是否所有的腳本編寫完美,某些瀏覽器可能不會在文件中執行任何腳本。

2)您可以用JavaScript擴展JavaScript文件執行PHP代碼(例如example.js)通過使用下面的.htaccess命令

AddHandler application/x-httpd-php .js .example2 .example3 
AddType text/javascript .js 

如果你想使用動態路徑(這是值得稱讚的),你不能把一個對象放在引號內,否則它將被視爲一個字符串而不是一個對象。

var path = 'http://localhost/site1/'; 
alert(path+'scripts/example.js'); 

3.)嘗試將腳本僅包含到腳本目錄,並且只在頭元素中包含腳本文件。這會迫使你編寫更好的JavaScript。對於那些誰內容後抱怨裝載腳本使用defer屬性...

<head> 
<script defer="defer" src="scripts/index.js" type="text/javascript"></script> 
<script defer="defer" src="scripts/onload.js" type="text/javascript"></script> 
</head> 

4)合併兩個文件,index.js和onload.js之間的腳本。該onload.js文件應該只包含一個匿名的onload函數和全局變量(內部沒有任何一種功能的變量)...

var global_var = 'use these sparingly'; 
var path = 'http://localhost/'<?php echo 'something/'; /* dynamically make this work on localhost and example.com, use print_r($_SERVER); to get started */ ?>'; 

window.onload = function() 
{ 
function_1('parameter_1','parameter_2'); 
function_2('parameter_1','parameter_2'); 
} 

5)你可以把多個.js文件分開和合並他們到使用PHP的單個index.js文件,以便它仍然易於使用。如果您需要一個非常有用的工具,我強烈建議使用高級查找和替換來快速查找和替換您的工作中的腳本。

6.)爲JavaScript和雙引號(X)HTML使用單引號。在編碼方式上的一致性是一種非常有價值的做法,一旦你接近它的擺動就可以得到很好的回報。

7.)我強烈建議使用PHP動態使用$ _SERVER變量來幫助您在JavaScript中設置var路徑,以便完全相同的代碼可以在本地主機上和您的實時域上使用(例如example.com)而不必修改任何東西。一個能勝任的程序員在將代碼投入實際環境之前總是會測試他們的代碼,否則很容易讓訪客感到厭煩,因爲即使是簡單的問題,因爲諸如文件被緩存以及瀏覽器都不會放棄壞的副本。

8.)由於您使用的PHP棒使用單引號,除非您確實需要使用雙引號。如果您不知道區別...

$e = 'aaa'; 
echo '123$e';//outouts 123$3 
echo "123$e";//outouts 123aaa 

9.)您可以使用alert(typeof object)。確定對象的上下文(例如對象(數組在JavaScript中稱爲對象),字符串,整數(數字)等)

10.)從不使用簡單的術語來表示函數名或變量名(例如var open = '';或者函數open(){})。在JavaScript中有保留的名稱,使用它們會導致你在某些瀏覽器中拉出所有的頭髮,這些頭髮並不告訴你這就是腳本不能運行的原因(並且不會觸發任何錯誤或警告),例如IE瀏覽器。嘗試使用諸如函數ajax_upload(),var option_this,var option_that等良好的命名方案。諸如SuperEdi之類的編輯器有一個函數面板,因此您可以將AJAX函數分組並按名稱排序(例如,ajax_1_init,ajax_2_build,ajax_3_request, ajax_4_handler,ajax_5_etc)。

希望這會有所幫助。