先和服务器建立链接javascript
var chat = new EventSource("/chat"); //这里的字符串可有可无,,只是作一个标识表示这个请求
服务器端接受请求后响应html
server.on("request", function(request, response) { var url = require('url').parse(request.url); //解析请求的url if (url.pathname == '/chat') { response.writeHead(200, {'Content-Type': 'text/event-stream'}); //很是重要 response.write("data: Connected\n\n"); //响应数据 //响应数据要"data: "开头 //若是链接关闭 request.connection.on("end", function() { response.end(); }); }
客户端监听响应java
chat.onmessage = function(event) { var msg = event.data; console.log(msg); }
补充:node
服务器端的监听请求和响应json
server.on("request", function(request, response) { //监听是否有请求到达此服务器 //我也不知道为何要解析 var url = require('url').parse(request.url); //若是请求方法是post,另外我查过了method是方法的意思 if (request.method == "POST") { var body = ""; //从请求主体获取数据,,chunk就是数据 request.on("data", function(chunk) { body += chunk; } //数据获取完毕,在服务器的控制台输出获取到的信息 request.on("end", function() { console.log("body: " + body); } //设置响应的头(类型,编码什么的) response.writeHead(200, {"Content-Type": "text/html"}); //200是成功的意思,,后面是类型 //响应的主体,,好像只能响应字符串 response.write("request OK"); //响应完毕 response.end(); } else if (request.mathod == "GET") { //若是是get请求 //this your code //什么判断文件类型啊,,文件内容啊,,文件能不能打开啊 } });
以上是nodejs服务器
如下记录一下客户端的请求:app
XMLHttpRequest的用法:
函数
新建一个请求对象,,由于请求有不少方法,,因此作成一个对象post
var request = new XMLHttpRequest(); //用的构造函数
选择一个请求方法,,有不少,,经常使用的就只有 post 和 get jsonp
request.open("GET", "http:www.baidu.****/****"); //第一个参数是方法,,第二个参数是url就是目标地址 //要注意的是虽然方法小写也没什么关系,,可是你们都是大写,,那就大写好了 request.open("POST", "*****");
这里能够设置请求的头类型什么的,,可是通常都会自动设置,,因此跳过
设置回调函数,,有不少做用,,好比下载的进度,,好比请求成功后能作什么,,
request.onreadystatechange(function() { //若是请求完成,,而且响应也成功接受 if (request.readyState == 4 && request.status == 200) { //第一个是请求的状态,,第二个是响应的状态 //调用响应的消息 console.log(request.responseText); } }
注意,,很是重要的一点来了,,前面全部的都是设置这个请求的属性,,,并无发送请求,,因此如今发送
request.send(null); //GET 并不用附带什么数据,,可是并非说不能 request.send("hello node"); //好像只能够发送字符串,,固然字符串变量也是能够的
这就是XMLHttpRequest的使用方法了
下面说一下JSONP:
原理很简单,,就是使用script调用外部文件那一套,,不过是在代码中调用并执行而已
甚至来讲最重要的是服务器响应的内容,,而不是客户端的请求内容
首先先设置一个url,,由于此次没有send方法了,,不能发随意发送数据了,,就须要url带上一些信息来证实这是一个特殊的请求
var url = "http://127.0.0.1:8000/js/my.js"; //本身服务器上的文件 function getJsonp(data) { //回调函数,,响应完成后执行 console.log(data); //这么调用实际上是错误的,,可是data就是my.js文件里的内容 } url += "?jsonp=" + "getJsonp"; //在末尾添加这样一段文本,,能够在服务器端找到
而后新建一个script文档元素,,设置url,,并插入文档的任意位置
var script = document.createElement('script'); script.src = url; //在这里就发送请求了,,还响应了 document.body.appendChild(script); //插进后面,,污,,这里就调用了script里面的内容
这个方法的服务器端配合:
var http = require('http'); var fs = require('fs'); var server = new http.Server(); server.listen(8000); server.on("request", function(request, response) { var url = require('url').parse(request.url); if (request.method == "GET") { //读取url里面的文件名 var filename = url.pathname.substring(1); var type; //判断要get的文件类型 //这里简化了,,,有不少类型的 switch(filename.substring(filename.lastIndexOf(".") + 1)) { case "html": type = "text/html; charset=utf-8"; break; case "js": type = "application/javascript; charset=utf-8"; break; } fs.readFile(filename, function(err, content) { if (err) { //若是发生错误云云 response.write(err.message); response.end(); } else { response.writeHead(200, {"Content-Type": type}); if (url.query) { //若是这个属性有数据的话,,,就是刚才设置的尾部接收到了 response.write(url.query.substring(url.query.indexOf('=') + 1) + "(" + content + ")"); //将刚才的尾部设置为函数调用,,返回响应 response.end(); } else { //正常响应 response.write(content); response.end(); } } }); } });
不知道为何,,,,代码看起来很是难看,,,,,
写了好多,,,,若是有人看到这里,,,不胜感激,,,,本人学疏才浅,,,必然有不少错误,,,若是能指正,,,万分感谢,,,
另外本人饿着肚子,,,,,若是有重庆的人,,,,而且手边正好有一份能糊口的工做,,,,不胜感激