js學習筆記(新手)

先和服務器建立鏈接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();
				}
			}
		});
	}
});

不知道爲何,,,,代碼看起來很是難看,,,,,

寫了好多,,,,若是有人看到這裏,,,不勝感激,,,,本人學疏才淺,,,必然有不少錯誤,,,若是能指正,,,萬分感謝,,,

另外本人餓着肚子,,,,,若是有重慶的人,,,,而且手邊正好有一份能餬口的工做,,,,不勝感激

相關文章
相關標籤/搜索