node.js+Ajax实现获取HTTP服务器返回数据


Posted in Javascript onNovember 26, 2014

我们看一个HTML5页面中通过AJAX请求的方式获取HTTP服务器返回数据的代码示例.由于我们把服务器的端口指定为1337,并将从端口为80的网站中运行HTML5页面,因此这是一种跨域操作,需要在HTTP响应头部中添加Access_Control_Allow_Origin字段,并且将参数指定为允许向服务器请求数据额域名+端口号(省略端口号时允许该域名下的任何端口向服务器请求数据),

静态页面:index.html(注:一定要放在服务器环境下,如果是win7系统的话,可以开启IIS服务,并把页面考过去直接运行这个页面,)

<!DOCTYPE html>

<html>

<head lang="en">

    <meta charset="UTF-8">

    <title>node中的ajax请求(html5页面)</title>

    <script type="text/javascript">

        function GetData(){

            var xhr=new XMLHttpRequest();

            xhr.open("GET","http://localhost:1337/",true);

            xhr.onreadystatechange=function(){

                if(xhr.readyState==4){

                    if(xhr.status==200){

                        document.getElementById("res").innerHTML=xhr.responseText;

                    }

                }

            }

            xhr.send(null);

        }

    </script>

</head>

<body>

<input type="button" value="获取数据" onclick="GetData()" />

<div id="res">dsdf</div>

</body>

</html>

node代码:

var http=require("http");

var server=http.createServer(function(req,res){

    if(req.url!=="/favicon.ico"){

        res.writeHead(200,{"Content-Type":"text/plain","Access-Control-Allow-Origin":"http://localhost"});

        res.write("你好啊!");

    }

    res.end();

});

server.listen(1337,"localhost",function(){

    console.log("开始监听...");

});

首先开启服务:node server.js

启动静态页面:

node.js+Ajax实现获取HTTP服务器返回数据

点击按钮"获取数据"

node.js+Ajax实现获取HTTP服务器返回数据

如果大家觉得需要配置服务器环境太麻烦,可以借用编辑器的优势来做.

比如我用的是webstrom 8.0;

当我启动页面的时候,浏览器中显示的是这个路径:

node.js+Ajax实现获取HTTP服务器返回数据

端口是63342.这个时候我们队代码做一些修改:

node的 server.js代码:

var http=require("http");

var server=http.createServer(function(req,res){

    if(req.url!=="/favicon.ico"){

        res.writeHead(200,{"Content-Type":"text/plain","Access-Control-Allow-Origin":"http://localhost:63342"});

        //res.setHeader();

        res.write("你好啊!");

    }

    res.end();

});

server.listen(1337,"localhost",function(){

    console.log("开始监听...");

});

修改了"Access-Control-Allow-Origin"的值.

重新运行demo会发现,达到同样的效果

也可以通过res.seetHeader来单独设置响应头部.

可以将上面的res.writeHead()改成res.setHeader();

var http=require("http");

var server=http.createServer(function(req,res){

    if(req.url!=="/favicon.ico"){

        //res.writeHead(200,{"Content-Type":"text/plain","Access-Control-Allow-Origin":"http://localhost:63342"});

        res.setHeader("Content-Type","text/plain");

        res.setHeader("Access-Control-Allow-Origin","http://localhost:63342");

        res.write("你好啊!");

    }

    res.end();

});

server.listen(1337,"localhost",function(){

    console.log("开始监听...");

});

细心的同学可能发现了,利用setHeader的方法时,缺少了一个状态码,比如200.那么我们在使用res.setHeader的时候,如何来设置状态码呢?等会上代码

ajax在服务器端返回的时候日期:

node.js+Ajax实现获取HTTP服务器返回数据

我们可以在服务器端返回时,删除这个字段.

设置res.sendData=false;

var http=require("http");

var server=http.createServer(function(req,res){

    if(req.url!=="/favicon.ico"){

        //res.writeHead(200,{"Content-Type":"text/plain","Access-Control-Allow-Origin":"http://localhost:63342"});

        res.statusCode=200;

        res.sendDate=false;

        res.setHeader("Content-Type","text/plain");

        res.setHeader("Access-Control-Allow-Origin","http://localhost:63342");

        res.write("你好啊!");

    }

    res.end();

});

server.listen(1337,"localhost",function(){

    console.log("开始监听...");

});

node.js+Ajax实现获取HTTP服务器返回数据

设置了状态码,也屏蔽了日期信息.

res.getHeader(name)获取我们设置的响应头信息

res.removeHeader(name);删除我们的头信息.必须在我们的write方法发送数据之情被调用.

res.headersSent属性是一个布尔值,当当响应头已发送时,属性值为true时;当响应头未发送时,属性值为false.

server.js代码:

var http=require("http");

var server=http.createServer(function(req,res){

    if(req.url!=="/favicon.ico"){

        if(res.headersSent)

            console.log("响应头已发送");

        else

            console.log("响应头未发送");

        res.writeHead(200,{"Content-Type":"text/plain","Access-Control-Allow-Origin":"http://localhost:63342"});

        if(res.headersSent)

            console.log("响应头已发送");

        else

            console.log("响应头未发送");        

        res.write("你好啊!");

    }

    res.end();

});

server.listen(1337,"localhost",function(){

    console.log("开始监听...");

});

运行demo查看结果:

node.js+Ajax实现获取HTTP服务器返回数据

res.write()方法是向客户端发送数据的,其实他还有一个返回值.

当向客户端发送的数据量比较小时或网速较快时,node总是将数据直接发送到操作系统的内核缓存区中,然后从内核缓存区中取出数据发送给对方.这个时候write会返回true.

当网速慢或数据量较大时,http服务器并不一定会立刻把数据发送给客户端,node会把数据缓存在内存中,并在对方可以接受数据的情况下将内存中的数据通过操作系统的内核发送给对方.这时的write返回false.

node.js+Ajax实现获取HTTP服务器返回数据

可以设置test.txt的内容多少来测试结果.

一个简单的node+ajax效果就实现了.是不是很简单呢?当然,想制作更加复杂的功能的话,我们还需要进一步的学习,以后我们慢慢来更新。

Javascript 相关文章推荐
服务器安全设置的几个注册表设置
Jul 28 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
Feb 03 Javascript
javascript数据类型示例分享
Jan 19 Javascript
浅析javascript中函数声明和函数表达式的区别
Feb 15 Javascript
jQuery实现表格颜色交替显示的方法
Mar 09 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
Dec 28 Javascript
angularjs 中$apply,$digest,$watch详解
Oct 13 Javascript
微信小程序 后台登录(非微信账号)实例详解
Mar 31 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
Jul 05 Javascript
ant-design表单处理和常用方法及自定义验证操作
Oct 27 Javascript
JavaScript中isPrototypeOf函数
Nov 07 Javascript
使用node.js 获取客户端信息代码分享
Nov 26 #Javascript
node+express+jade制作简单网站指南
Nov 26 #Javascript
JS简单操作select和dropdownlist实例
Nov 26 #Javascript
node+express+ejs制作简单页面上手指南
Nov 26 #Javascript
node.js使用require()函数加载模块
Nov 26 #Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
Nov 26 #Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
Nov 26 #Javascript
You might like
php删除数组元素示例分享
2014/02/17 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
农历与西历对照
2006/09/06 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
script标签属性用type还是language
2015/01/21 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
Python中特殊函数集锦
2015/07/27 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
分析经典Python开发工程师面试题
2019/04/08 Python
python实现智能语音天气预报
2019/12/02 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
2020/03/12 Python
Django中template for如何使用方法
2021/01/31 Python
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
愚人节活动策划方案
2014/03/11 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
委托书格式范文
2015/01/28 职场文书
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android