【问题标题】:Jquery: Running AJAX locally without a webserverJquery:在没有网络服务器的情况下在本地运行 AJAX
【发布时间】:2011-03-24 18:46:32
【问题描述】:

我在 index.html 的 .js 文件中有以下函数

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,即没有网络服务器,用户只需双击 index.html,它应该运行但它没有运行。数据始终为空。可能是什么问题呢?对不起,我是一个超级 JQuery 菜鸟。

getdata.php 文件中的代码是

<?

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

?>

【问题讨论】:

  • 请澄清一件事,即使您在没有网络服务器的情况下运行网页,您是否仍在向网络服务器发布(进行 AJAX 调用)?
  • 我建议你使用php -S localhost:80 来启动一个简单的webserver。

标签: php javascript jquery ajax


【解决方案1】:

我对自己很满意,因为阅读了人们发布的关于如果没有 Web 服务器就无法“在本地”执行 AJAX 的答案,我找到了解决方案,了解如何执行此操作。在 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>

【讨论】:

  • 这在最新版本的 Chrome 中不再适用(错误:“跨源请求仅支持协议方案:http、data、chrome-extension、https、chrome-extension-resource。” ) 和 Firefox(错误:“访问受限 URI 被拒绝”)。
【解决方案2】:

你不能这样做,你也应该从 web 服务器地址打开你的 html 文件,例如http://localhost/yoursite/file.html 甚至远程服务器 url。您需要通过服务器/服务器 url。

【讨论】:

    【解决方案3】:

    Ajax 不能像其他人提到的那样通过 file:// 协议工作。 也许你想要像 http://www.appcelerator.com/ 这样的东西来使用 html/js/css 创建桌面应用程序

    【讨论】:

      【解决方案4】:

      当您从文件中运行 index.html 时,AJAX 会起作用。但是出现问题是因为您正在查看地址为“file://....../index.html”的文件,并且您正在向“http://localhost/..../something.php”发出 AJAX 请求,由于跨站点脚本,这是不允许的.所有 AJAX 请求都必须发送到同一个域/服务器。

      这是假设您通过双击文件来查看文件并且仍然向网络服务器发出 AJAX 请求。

      【讨论】:

      • 另外,即使 URL 是相对的,它也不起作用,否则,在 CD 上运行的网站将可以访问整个文件系统。
      【解决方案5】:

      阅读SOP。出于安全原因,从当前域以外的域访问数据被阻止。

      【讨论】:

      • 我认为这与他的问题无关。
      【解决方案6】:

      网络服务器正是为您处理所有细节的东西。

      如果没有可发布的网络服务器,您将无法发布。 HTTP = Web 协议,因此您不能拥有没有 Web 服务器作为目标的 HTTP URL。

      Web 服务器也是接收您对 PHP 页面的请求并运行 PHP 解释器、管理输入和输出的进程。

      为什么要在本地运行?

      【讨论】:

      • 我认为他正在本地运行网页(通过 C:\...\index.html),但他仍在向 Web 服务器发出请求(使用 php)。我认为这是一个跨站点脚本问题(见我的回答),而不是解析问题。
      【解决方案7】:

      AJAX 需要一个网络服务器与之通信才能检索任何数据;否则它只是对着墙说话。在没有网络服务器的情况下运行脚本就像尝试在没有手机服务的情况下拨打电话一样。 :D

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        相关资源
        最近更新 更多