Ajax请求返回整个脚本

时间:2016-08-06 22:17:30

标签: javascript html ajax node.js

我一直在寻找解决方案...所以基本上我有2个文件:index.html和hellonode.js。 Index.html有一个带文本的div和一个按钮,当点击时它应该向hellonode.js发出请求。 hellonode.js应该接收请求并向它们发送响应。

hellonode.js:

var http= require('http');


function onRequest(request, response){
    console.log("request has been received");

response.writeHead(200, {"Context-Type": "text/plain"});
    response.write("<h1>response here!</h1>");
    response.end();


}


http.createServer(onRequest).listen(8888);

console.log("server is running");

这是我的index.html:

<!DOCTYPE html>
<html>
<head>
<script>
    function loadXMLDoc() {
        var xmlhttp;

            xmlhttp = new XMLHttpRequest();


        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById('myDiv').innerHTML=xmlhttp.responseText;
            }
        }

        xmlhttp.open("GET", "hellonode.js", true);
        xmlhttp.send();

    }

</script>
</head>
<body>
    <div id="myDiv">
        <h2>content</h2>
    </div>
    <button type="button" onclick="loadXMLDoc()">Your response content should appear here</button>
</body>
</html> 

我使用节点js和apache服务器(Apachelounge.com上的二进制版本),并在htdocs文件夹中放入那两个文件,然后启动我的服务器,所以当我从其他计算机访问192.168.0.102时,我得到index.html屏幕。一切都很好,直到这里。当我单击按钮并发送请求时,我收到的响应是hellonode.js的整个javascript代码。为什么会这样?我有一种感觉,我的hellonode.js甚至没有收到我的请求,并且index.html只是阅读hellonode的内容并显示它实际上是向它发送请求。我是这个服务器端的新手。感谢。

6 个答案:

答案 0 :(得分:1)

Apache HTTPD是一个HTTP服务器。您编写的JavaScript也是HTTP服务器。

您正在向Apache HTTP发送包含JavaScript程序的文件的请求。

您应该通过Node.js运行JavaScript程序(例如从服务器的命令行),然后使用XMLHttpRequest向http://example.com:8888/发送请求

注意,您将进入this error,因此您需要修改JavaScript程序以在响应中包含CORS标头。 (或者您可以使用Apache的mod_proxy来向Apache发出请求,然后将其转发到JavaScript服务器)。

答案 1 :(得分:0)

这种情况正在发生,因为您使用GET请求请求文件hellonode.js。

您需要设置和结束您可以发送请求的点。例如。

您需要设置节点服务器而不是apache节点服务器。

答案 2 :(得分:0)

你是对的。通过向hellonode.js发送XHR请求,它只是发送检索文件的请求,然后返回所述文件的所有内容。

看起来你要做的就是运行一个Node服务器。您将需要将服务器配置为能够为Node应用程序提供服务,而不是通过Apache运行它(除非您想要serve a Node app with Apache)。

要在本地执行此操作,您应该运行Pattern pat = Pattern.compile("(?<!\\\\)\""); System.out.println(pat.matcher("quote \" not escaped").find()); // prints true, the " doesn't follow a \ System.out.println(pat.matcher("quote \\\" escaped").find()); // prints false, the " follows a \ ,它将使用Node启动服务器,并且能够像您期望的那样提供资源。

(但是,在这种情况下,向文件发送XHR请求只会返回整个文件而不运行它)

答案 3 :(得分:0)

Nodejs不打算与apache一起运行。 Apache正确显示您的html页面,因为它旨在为PHP脚本提供html页面 - 但不是为了提供节点脚本。因此请求就像纯文本一样返回节点脚本,就像从浏览器中的网页请求.css或.js文件资产一样。

您必须使用node命令设置显式调用它的节点脚本:     node hellonode.js

或者在linux中:     nodejs hellonode.js

然后,如果您的请求和服务器端脚本已正确编码,则nodejs将实际侦听请求并发送正确的响应。

但是,请记住,使用节点提供服务的页面并不像使用apache那样简单,并且在nodemonpm2等服务中进行自我教育肯定会让您失望。

答案 4 :(得分:0)

例如,xmlhttp.open("GET", "hellonode.js", true);可以是xmlhttp.open("GET", "http://www.thomas-bayer.com/sqlrest/", true);

答案 5 :(得分:0)

输入您的终端后:

node hellonode.js 

Nodejs服务器正在当前目录上运行,hellonode.js文件用于在您浏览到localhost:8888时显示结果,换句话说,您的hellonode.js文件正在扮演经典php应用程序中的index.php

要实现您的目标,您可以使用内置的http模块,或使用Expressjs等框架。