2015-05-06 52 views
-1

我進入AJAX,並使用MAMP網絡服務器,並試圖實現一個簡單的腳本,應該告訴我這是否工作。我嘗試使用XMLHttpRequest()的status屬性來追蹤問題; 我發現這是404類型的問題(頁面未找到),這很令人驚訝,因爲我使用JSON文件來處理與我的ajax腳本位於同一目錄中的腳本。爲什麼我用這個AJAX腳本接收狀態404?

這裏是AJAX腳本:

var xhr = new XMLHttpRequest(); 
xhr.onload = function() { 

if (xhr.status === 200) { 

    alert("Good"); 
} 

else if(xhr.status === 304) 
{ 
    alert("304"); 

} 


else if(xhr.status === 404) 
{ 
    alert("404"); 
} 

else 
{ 
    alert("500"); 
} 
xhr.open("GET", 'json.json', true); 
xhr.send(null); 

在這裏,我的文件json.json:

{ 
"events" : 
[ 
    { 
     "location" : "San Francisco, CA" 
    } 

] 
} 

這真是令人沮喪。在此先感謝,

勞爾饒

+0

它返回404意味着它找不到'json.json'文件。使用瀏覽器開發工具中的網絡標籤查看正在請求的完整URL。 – DAC84

+0

json.json文件與執行腳本的頁面位於同一文件夾中嗎? – somethinghere

+0

是的,他JSOn文件在同一個文件夾中。 –

回答

1

我使用JSON文件來處理腳本是在同一目錄作爲我的AJAX腳本

JSON文件的位置無關,做一些JavaScript文件的位置。服務器不知道或關心在前端運行的JS文件恰好從哪裏獲取,並且無法找到與之相關的任何內容。相反,Ajax URL被解釋爲相對於正在服務的頁面的URL(如果指定爲相對;也可以指定爲絕對,在這種情況下,它與Web文檔根目錄相關)。

例子從html.html檢索json.json時,將工作:

webroot 
    html.html 
    json.json  <== is at same level as html.html 
    js 
     js.js  <== doesn't matter where this is 

webroot 
    html 
     html.html 
     json.json <== is at same level as html.html 
    js 
     js.js 

例子是不會工作:

webroot 
    html.html 
    js 
     js.js  <== doesn't matter where this is 
     json.json <== is not at same level as html.html 

例子是工作檢索/json.json時(注意是領先斜線):

webroot 
    html 
     html.html 
    json.json  <== at web root 
    js 
     js.js 
+0

其實,我認爲它可能會更好地提及它應該在與_executes_腳本相同的文件夾中,否則,是的。 – somethinghere

+0

Sry,但是你的意思是「網絡服務器的根目錄」,你的意思是htdocs,因爲它位於該根目錄中,並且JSON文件與我的ajax.js文件位於相同的文件夾中。而這個答案不回答爲什麼我的狀態404。 –

+0

因爲404的意思是「找不到」。是的,我的意思是htdocs。沒有人知道或關心JS文件在執行時來自哪裏。 Ajax URL是相對於所服務的頁面進行解釋的。 –

相關問題