2010-08-03 33 views
13

本地運行AJAX我在.js文件中下面的函數中的index.htmljQuery的:沒有一個網絡服務器

function getValues(){ 

$.ajax({ 
    type: 'POST', 
    url: "http://localhost/getData/getdata.php", 
    success: function(data){ 
    var dataValues; 
    var apnd; 

    dataValues = String(data.NSE); 
    apnd = "a"; 
    updateValues(dataValues, apnd); 

    dataValues = String(data.BSE); 
    apnd = "b"; 
    updateValues(dataValues, apnd); 
    }, 
    dataType: "json" 
}); 

} 

當我像WAMP網絡服務器運行這個工作正常。但我想本地運行index.html,即沒有web服務器,用戶只需雙擊index.html,它應該運行,但它不會。數據始終爲空。可能是什麼問題呢?對不起,我是一個超級JQuery Noob。

在訪問getdata.php文件中的代碼是

<? 

echo json_encode(array("NSE"=>rand(5000, 20000),"BSE"=>rand(5000, 20000))); 

?> 
+1

請清除一件事,即使您在沒有Web服務器的情況下運行網頁,您是否仍然向Web服務器發佈(發出AJAX呼叫)? – 2010-08-03 14:55:36

+1

我建議你使用'php -S localhost:80'來啓動一個簡單的網絡服務器。 – ahui 2014-06-21 18:17:38

回答

3

你不能做到這一點,你應該打開你的HTML文件還從Web服務器地址,如http://localhost/yoursite/file.html甚至遠程服務器URL。你需要通過服務器/服務器的網址。

7

AJAX需要一個網絡服務器進行通信,以便它能夠檢索任何數據;否則它只是在和牆說話。在沒有網絡服務器的情況下運行腳本就像試圖撥打沒有服務的電話一樣。 :D

6

Web服務器正是爲您處理所有細節的。

如果沒有Web服務器進行發佈,您無法進行POST。 HTTP = Web協議,所以你不能有一個沒有Web服務器的HTTP URL來定位。

Web服務器也是一個過程,它接受您對PHP頁面的請求並運行PHP解釋器,管理輸入和輸出。

爲什麼你想在本地運行它?

+2

我認爲他在本地運行網頁(通過C:\ ... \ index.html),但他仍然向web服務器(使用php)發出請求。我認爲這是一個跨站點腳本問題(請參閱我的答案),而不是解析問題。 – 2010-08-03 14:58:41

+0

完全按照Bob的說法 – Steven 2010-08-03 15:05:35

3

閱讀SOP。出於安全原因,阻止從當前域以外的域訪問數據。

+4

我不認爲這與他的問題有關。 – 2010-08-03 14:52:52

15

當你從一個AJAX文件運行你的index.html。但問題的發生是因爲您正在查看地址「file://....../index.html」中的文件,並且您正在向「http://localhost/..../something.php」發出AJAX請求,因爲跨站點腳本不允許該請求。所有的AJAX請求必須轉到同一個域/服務器。

這是假定您正在通過雙擊查看文件並仍然向Web服務器發出AJAX請求。

+0

我不知道這個。謝謝 – Steven 2010-08-03 15:06:29

+0

此外,即使URL是相對的,它也不起作用,否則,運行在CD上的網站將可以訪問整個文件系統。 – 2016-08-15 15:54:29

3

我捧腹與自己因爲讀書人張貼了關於如何不能做AJAX「本地」的答案沒有一個Web服務器設我來解決你如何做到這一點。使用JavaScript,XMLHttpRequest()對象的方法主要由瀏覽器生成,您需要省略Web服務器生成的方法(xmlhttp.status == 200)。以下作品:

<script> 
window.onload = function() { 

    var input = document.getElementById("input"); 

    input.onclick = function() { 
     var xmlhttp; 
     xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4) { 
       document.getElementById("response").innerHTML = xmlhttp.responseText; 
      } 
     } 
     xmlhttp.open("GET", "response.html", true); 
     xmlhttp.send(); 
    } 
} 
</script> 
</head> 

<body> 
<h3>AJAX Request/Response</h3> 
<p></p> 
<input id="input" type="button" value="Call AJAX" /> 
<p></p> 
<div id="response"></div> 
+2

在Chrome的最新版本(錯誤:「交叉源請求僅支持協議方案:http,data,chrome-extension,https,chrome-extension-resource。」)和Firefox(錯誤:「」訪問受限制的URI被拒絕「)。 – adelphus 2015-01-28 12:35:26

相關問題