使用原生的ajax如何去提交json格式的数据呢?

如何通过原生的ajax去提交json格式的数据呢?


var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function () {
    if(xhr.readyState === 4 && xhr.status === 200) {
        console.log(xhr.responseText);
    }
}

xhr.open('POST', 'http://test.csiem.baidu.com/api/v1/userProfile/lbs', true);

xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');    //设置HTTP header字段值

var postData = {domain: "xywy.com"};    //需要发送的数据 

xhr.send(postData);

但是最后提交的时候显示的post的数据为[object object];

阅读 13.1k
3 个回答

计算机传送的始终是“字符”,所谓的对象对另一种语言来说,可能啥都不是,可能碰巧能反序列化成它的对象,但传递的时候,始终是字符。

所以,{}在js里面是对象,转换成了[object object] 字符传递。

要传递对象,需要将其序列化。在服务器那边反序列化。
json的格式许多语言都能轻易转换为它能理解的对象,所以广受欢迎。js先把{}序列化,在服务器端,解析json字符串还原对象即可。

也就是说,需要tostring(或者叫serialize)的过程。


Update

一般大家都没这样做,是因为这些操作都被上层封装了,甚至是http协议也帮了忙,譬如application/json 的请求头告诉服务器关于这次发送的是个json串的信息。
一般的数据都会被格式化为
?a=b&c=d的形式 填充在req body内
不管是GET还是POST

没想到过了4年了我这个回答仍然有人认真关注,以前我也想不懂我是怎么回答的,重新编辑一下……

const body = JSON.stringify({
  a: '111',
  b: '222'
});

const xhr = new XMLHttpRequest();
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.open('POST', '/api/xxxx');
xhr.send(body); // http请求一般来说就是发送字符串,所以必须先将json转换为json字符串

转换成键值对才行;当然也可以直接吧json转成字符串提交,到服务器时再编码成数组就行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏