node.js版本$.ajax方法,使用基本和jQuery.ajax相同
发布于 12 年前 作者 panxuepeng 15742 次浏览 最后一次编辑是 8 年前
/**
 * 功能:本文件主要实现了nodejs版本的$.ajax方法,使用基本和jQuery.ajax相同
 * 时间:2012-07-17
 * 作者:潘雪鹏
*/

var http = require("http"),
	Url = require("url"),
	querystring = require('querystring');

// 默认值
function defaults(url){
	return {
		// 如果返回false可以取消本次请求
		beforeSend: function(req){},
		complete: function(req){},
		data: '', // Object, String
		dataType: 'html',
		error: function(){},
		headers: {}, // {k:v, ...}
		statusCode: {},
		success: function(data){},
		timeout: 10,
		type: 'GET', // GET, POST
		url: url
	}
}

/**
 * 
 */
function ajax( settings ){
	// ajax(settings)
	if( typeof settings === "object" ){
		// 处理默认值继承
		// todo ...
		
	}
	
	var params = Url.parse(settings.url, true);
	// params 解析出来的参数如下
	// {
	// "protocol":"http:",
	// "slashes":true,
	// "host":"localhost:3000",
	// "port":"3000",
	// "hostname":"localhost",
	// "href":"http://localhost:3000/?d=1",
	// "search":"?d=1",
	// "query":{"d":"1"},
	// "pathname":"/",
	// "path":"/?d=1"
	// }
	
	var options = {
		host: params.hostname,
		port: params.port || 80,
		path: params.path,
		method: settings.type
	};
	
	var req = http.request(options, function(res) {
		var data = '';
		res.on('data', function(chunk){
			data += chunk;
		}).on('end', function(){
			if(	settings.dataType === "json" ){
				try{
					data = JSON.parse(data);
				}catch(e){
					data = null;
				}
			}
			settings.success(data);
			settings.complete(req);
		});
	}).on('error', function(e) {
		settings.error(e);
	});
	
	if( typeof settings.beforeSend === "function" ){
		if ( !settings.beforeSend(req) ){
			settings.complete(req);
			req.end();
			return false;
		}
	}
	
	if( settings.type === "POST" ){
		req.write(querystring.stringify(settings.data));
	}
	
	req.setTimeout(settings.timeout);
	req.end();
}

exports.ajax = ajax;
5 回复

这代码… 前后记得加两行个 3 个反引号高亮下, 统一增加缩进也行啊

前后添加3个反引号,果然好使

这是什么编辑器,看着还很舒服的

发个jquery版本的nodejs使用ajax的例子可以不,在下就是做个登录,纠结了1天了,ajax验证,提交显示not a string or buffer,求帮忙

回到顶部