2012-03-09 106 views
0

我一直在玩Javascript,現在我來到了Ajax。我試圖寫的很簡單的腳本,將獲得該文件的內容 - 與id=test打印在divtxt文件內容。這是腳本:爲什麼我的基本Ajax腳本不工作?

function loadXMLDoc(url) 
{ 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.open("GET" , url ,false); 
    xmlhttp.send(null); 
    document.getElementById('test').innerHTML = xmlhttp.responseText; 
} 

當我使用它這個網站上:

<div id="test" name="test"> HELLo </div> 
<button type="button" onclick="loadXMLDoc('test1.txt')">ClickMe1</button> 

有了這個腳本HELLo是什麼取代 - 腳本清空容器。

也許我失去了一些東西微不足道,但我還需要安裝PHP?我不這麼認爲,但是......我不確定這裏發生了什麼。當我調試時,xmlhttp一直是空的。爲什麼?

+4

我會建議使用框架,如jQuery阿賈克斯,它會自動處理大量不同的瀏覽器,甚至同一個瀏覽器,但不同版本之間的不一致。 – alykhalid 2012-03-09 12:52:04

+0

你會得到什麼錯誤? – 2012-03-09 13:07:46

+0

@ClydeLobo正如我發現剛纔 - 我的'xmlhttp.status'是整個時間'0'。這是爲什麼?我應該得到'200' – Patryk 2012-03-09 13:26:14

回答

1

對於除IE之外的瀏覽器

IE的活動X對象似乎不那麼在意的準備狀態,其他瀏覽器可能沒有加載速度不夠快的時候文本你運行你的函數(因此你爲什麼得到空白而不是文件內容)。 IE的活動X似乎自動處理並忽略就緒狀態,因此您必須按照以下方式分解代碼。通常你檢查status請求,看看它的訪問responseText之前被完全讀取或沒有。

添加onreadystatechange無法檢查status屬性,因爲有一個文件系統請求而作出任何HTTP請求。 (該狀態將始終要求爲0通過HTTP沒有取得)我能提供的最好的是這樣的:

function loadXMLDoc(url) 
{ 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange = function() { 
     document.getElementById('test').innerHTML = xmlhttp.responseText; 
     } 
     xmlhttp.open("GET", url); 
     xmlhttp.send(null); 

    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 

     xmlhttp.open("GET", url); 
     xmlhttp.send(null); 
     document.getElementById('test').innerHTML = xmlhttp.responseText; 
    } 

} 

鍍鉻

如果您正在使用CHROME您必須啓動Chrome瀏覽器與--allow-file-access-from-files開關。否則,將拒絕文件系統 ajax請求。 (即使使用諸如jQuery之類的所謂的「更容易」的庫,您也必須設置它)。

運行在文件系統在一般

AJAX應用程序通常不是一個好主意,有很多注意事項,以這條路線。通常,本地開發是通過在開發機器上安裝到本地主機的Web服務器完成的。

+0

非常好的anwer,但它不能這樣工作。 – Patryk 2012-03-09 20:16:57

+0

如果你能告訴我你正在使用的操作系統和瀏覽器(和版本),我可以嘗試幫助你進一步得到一個工作版本。 – user17753 2012-03-09 20:45:35

+0

我使用Windows 7(64位)和Opera 11.61。 – Patryk 2012-03-10 15:49:39

-1

嘗試使用jQuery。下載最新版本here,寫此代碼段:

function loadXMLDoc(url) { 
    $("#test").load(url); 
} 

這是更簡單,減少錯誤

1

你需要替換文本之前檢查的readyState以及HTTP響應狀態;

if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("test").innerHTML=xmlhttp.responseText; 
    } 

http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp

請讓我知道,如果它的工作原理的例子。

+0

我已經嘗試這樣做:在調試時我發現我的'xmlhttp.status'是整個時間'0'。那麼這裏有什麼問題? – Patryk 2012-03-09 13:23:51

+0

您是否嘗試提出任何跨域請求...您似乎沒有得到迴應請求的回覆。 – testndtv 2012-03-09 16:23:22

+0

我正在做本地機器上的所有內容 - 如前所述,沒有任何Web服務器。 – Patryk 2012-03-09 16:38:30

-1

你需要一臺服務器來聽好了請求。您的常規文件系統將無法響應AJAX請求。

你不需要PHP,但是你需要Apache或類似的網絡服務器。

+0

我想我不需要服務器,但如果我錯了請糾正我。 – Patryk 2012-03-09 13:19:31

0

首先,你有Same Origin Policy戰鬥。

用於同步請求簡單的工作碼被以下:

var req = new XMLHttpRequest(); 
req.onreadystatechange = function() { 

if (req.status == 200 && req.readyState == 4) { 
    ... 
} 

req.open('GET', url, true); 
req.send(null); 

注意這是工作爲Firefox /歌劇/鉻。如果IE瀏覽器,使用方法:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
+0

我也試過這個 - 異步請求 - 它沒有工作。 – Patryk 2012-03-09 13:12:10