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, //80:http请求 443:https请求
path: params.path,
method: settings.type,
headers:{
'Content-Type':'application/x-www-form-urlencoded',
'Content-Length': settings.data ? settings.data.length : 0
}
}; if(settings.cookie) options.headers['Cookie'] = settings.cookie; 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(settings.data);
} req.setTimeout(settings.timeout);
req.end();
} exports.ajax = ajax;

  

node 后台ajax文件(同时支持http、https)的更多相关文章

  1. node学习笔记(二)(ajax方式向node后台提交数据)

    通过ajax向node后台提交数据过程(附手写前后台代码),并总结post与get的区别 POST 前台代码 //CSS简单给点样式 <style> form{ width: 200px; ...

  2. jquery.form.js官方插件介绍Form插件,支持Ajax,支持Ajax文件上传

    jquery.form.js官方插件介绍Form插件,支持Ajax,支持Ajax文件上传 http://www.malsup.com/jquery/form/#getting-started [JQu ...

  3. Ajax 文件上传

    原文地址:http://blog.sina.com.cn/s/blog_5d64f7e3010127ns.html 用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest ...

  4. node中间层实现文件上传

    一般情况下,前端的文件上传一般都是通过form表单的(<input type="file" />)来完成文件的上传,如果使用node中间层完成跨域,文件的上传就需要在n ...

  5. springmvc+ajax文件上传

    环境:JDK6以上,这里我是用JDK8,mysql57,maven项目 框架环境:spring+springmvc+mybaits或spring+springmvc+mybatis plus 前端代码 ...

  6. 使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html

    使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },&qu ...

  7. node后台fetch请求数据-Hostname/IP doesn't match certificate's altnames解决方法

    一.问题背景 基于express框架,node后台fetch请求数据,报错Hostname/IP doesn't match certificate's altnames..... require(' ...

  8. Node.js写文件的三种方法

    Node.js写文件的三种方式: 1.通过管道流写文件 采用管道传输二进制流,可以实现自动管理流,可写流不必当心可读流流的过快而崩溃,适合大小文件传输(推荐) var readStream = fs. ...

  9. AJAX文件上传实践与分析,带HTML5文件上传API。

    对于HTML5已经支持AJAX文件上传了,但如果需要兼容的话还是得用一点小技巧的,HTML5等等介绍,先来看看以前我们是怎么写的. 网上可能会有一些叫AJAX文件上传插件,但在AJAX2.0之前是不可 ...

随机推荐

  1. hdoj 1862 EXCEL排序

    EXCEL排序 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. AX2012服务器配置--Windows Server 2012 如何实现多个用户远程桌面登陆?

    Windows Server 2012 如何实现多个用户远程桌面登陆?说明:Windows Server 2012默认情况下,只运行2个用户远程桌面登陆,这里我们可以通过安装远程桌面会话主机配置来实现 ...

  3. linux 通用时钟框架CCF

    linux CCF 时钟框架 简单介绍 这里讲的时钟是给soc各组件提供时钟的树状框架,并非内核使用的时间,和其它模块一样,clk也有框架,用以适配不同的平台.适配层之上是客户代码和接口,也就是各模块 ...

  4. 如何利用 _ViewStart.cshtml对页面添加代码?

    _ViewStart.cshtml 添加的代码会出现在页面的最上面(<html> 之前) .这样就造成了我原先很多页面出现兼容性问题(经难是因为<html>之前出现了其它的代码 ...

  5. [Javascript] IIFE

    Javascript modules are a design pattern that allow you to encapsulate your code into smaller self ma ...

  6. hibernate入门之person表

    下面的hibernate入门person表指的是:根据mysql数据库中的test表和其中的元素-->建立映射表==>进而创建持久化类的顺序来操作了,下面为步骤 1.配置MySQL驱动程序 ...

  7. labview 移位寄存器、隧道、索引隧道的区别

    Lab view区别:移位寄存器.隧道.索引隧道 最近研究Lab view的时候发现移位寄存器和隧道的功能非常相似但是又有区别 外部数据进入循环体是通过隧道进入的,有几种方式: 图1:For 循环结构 ...

  8. pnd3

    这两天重写了,消除后本身的下落计算还有问题,新产生的块下落和消除已经OK了.消除算法真的很要命.最后还是回归最开始的想法,用递归的方式不断的SPREAD来得到消除的数据.快到月底了,得勤写写了,要不找 ...

  9. javaBean登录注册

    package javabean; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.Res ...

  10. Vector使用

    ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 Vector 类提供了实现可增长数组的功能,随着更多元素加入其中,数组变的更大.在删除一些元素之 ...