xhr的send方法以及node如何处理get和post数据

起因:看了阮一峰老师的关于上传文件的文章,进行测试,在使用xhr对象的send方法时遇到问题。

遇到的问题是使用send方法传送过去的数据,在node后台无法接收,经过很多次测试,怀疑是不是send与node不兼容导致。

所以使用了jq的ajax方法进行测试,

$("#sub").click(function(){
        $.ajax({
            url:"/upload",
            data:"foo=123",
            type:"POST"
        })
    })

发现post过去的数据可以使用req.body接收。

因为jq的ajax方法的原生便是xhr对象,所以基本排除send方法与node不兼容的说法。

之后查阅资料发现,原来使用send方法时,如果是get请求则直接写open和send即可,

但是假设是post方法传数据给后台,则需要加

xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");

否则post过去的数据无法被正常接收。

补充:如果使用get方法,基本用法应该如下:

 var xhr=new XMLHttpRequest();
 xhr.open("GET","upload?username=qiangzi&password=123"; xhr.send(null);

其中的url可以拼接字符串从而达到传参。

后台的node接收get数据如下:

var url=require("url");
var querystring=require("querystring");

exports.upload=function(req,res){

    var body=req.url;
    //得到的是一段字符串
    //  /?username=qiangzi&password=123

    var urlObj=url.parse(body);
    //把url解析成为对象
    //Url {
    //    protocol: null,
    //    slashes: null,
    //    auth: null,
    //    host: null,
    //    port: null,
    //    hostname: null,
    //    hash: null,
    //    search: ‘?username=qiangzi&password=123‘,
    //    query: ‘username=qiangzi&password=123‘,
    //    pathname: ‘/‘,
    //    path: ‘/?username=qiangzi&password=123‘,
    //    href: ‘/?username=qiangzi&password=123‘ }

    var queryStr=urlObj.query;
    //获得传值部分

    //由于传的值是字符串,所以想办法变成对象,此处使用的是node自带的querystring方法,需引入
    var queryObj = querystring.parse(queryStr);
    //切割成对象之后我们就可以获取我们想要的部分.
  console.log(queryObj)

  //{ username: ‘qiangzi‘, password: ‘123‘ }
};

post方法:

var xhr=new XMLHttpRequest();
xhr.open("POST","upload");
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
xhr.send("user=qiangzi");

后台接收post数据:

exports.upload=function(req,res){
    console.log(req.body)  //{ user: ‘qiangzi‘ }
};
时间: 2024-10-01 00:29:08

xhr的send方法以及node如何处理get和post数据的相关文章

Ajax中send方法参数的使用

一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null. 例如 : var url = "login.jsp?user=XXX&pwd=XXX"; xmlHttpRequest.open("GET",url,true); xmlHttpRequset.send(null); 此外,也可以使用send方法传递参数.使用send方法传递参数使用的是POST方法,需

【转】Ajax中send方法参数的使用(get/post)

Ajax中send方法参数的使用 一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null. 例如 : var url = "login.jsp?user=XXX&pwd=XXX"; xmlHttpRequest.open("GET",url,true); xmlHttpRequset.send(null); 此外,也可以使用send方法传递参数.使用send方

nodejs 中Express 的 send方法

如果send()发送的是一个json,比如 {name:'David',age:18,gender:undefined} 那么客户端只能接收到 {name:'Daivd',age:18} 这样的数据. send方法直接把undefined数据过滤掉了! 具体原因等有空再去查.

Ajax XMLHttpRequest对象的三个属性以及open和send方法

(1)onreadystatechange 属性onreadystatechange 属性存有处理服务器响应的函数.下面的代码定义一个空的函数,可同时对 onreadystatechange 属性进行设置: xmlHttp.onreadystatechange=function(){// 我们需要在这里写一些代码}(2)readyState 属性readyState 属性存有服务器响应的状态信息.每当 readyState 改变时,onreadystatechange 函数就会被执行. 这是 r

生成器的扩展 ------ send() 方法

生成器的 send() 方法g.send ('A') 1 send 和 next 的工作的起止位置是完全相同的 2 send 可以把一个值作为 信号量 传递到函数中去 3 并且 在生成器开始 只能先使用next 4 send('a')改变上一次yield的内容 可以用yield 返回同一个改变的值来返回 # def fun(): # print(1) # yield 2 #888 # print(3) # value=yield 4 #value---None # print(6) # yiel

【Python学习之十】yield之send方法

yield作用 简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.下面以斐波拉契数列来做个说明: # 普通的函数实现 def fib(max): n, a, b = 0, 0, 1 while n < max: print(b) a, b = b, a + b n = n + 1 return 'done' """不足: 在 fab 函数中用 pri

利用 send 方法计算多个数的平均数

利用 send 方法计算多个数的平均数,并且可以多次输入: def averager(): # 创建一个生成器函数 sum = 0 # 创建一个总数变量 count = 0 # 创建一个个数变量 avg = 0 # 创建一个平均数变量 while True: # while 循环 num = yield avg # 先执行 next,然后再执行 send,yield avg 接受 send 返给函数的值,传给 num. sum = sum + num # 第一次 sum = 0 + 10 (nu

Node.js处理I/O数据之Buffer模块缓冲数据

一.前传 在之前做web时也经常用到js对象转json和json转js对象.既然是Node.js处理I/O数据,也把这个记下来. Json转Js对象:JSON.parse(jsonstr); //可以将json字符串转换成json对象 Js对象转Json:JSON.stringify(jsonobj); //可以将json对象转换成json对符串 var jsonStr='{"name":"cuiyanwei","sex":"男&quo

用node.js(socket.io)实现数据实时推送

在做商品拍卖的时候,要求在商品的拍卖页面需要实时的更新当前商品的最高价格.实现的方式有很多,比如: 1.setInterval每隔n秒去异步拉取数据(缺点:更新不够实时) 2. AJAX轮询方式方式推送数据(缺点:服务端需要在死循环中反复查询数据库) 3.websocket推送数据(缺点:仅支持html5标准的浏览器) socket.io的简要介绍 所有客户端都通过socket.io挂在nodejs服务器上(注意: 只是挂着,不需要任何循环,因为它是事件驱动的):需要推送消息了,服务器就与nod