2010-08-03 89 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

相关问题