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

使用原生的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];


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


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

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

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

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


Update

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


请放弃ajax,用fetch,新的原生接口,比ajax更方便使用

var fetchResponse = fetch('/postData', {
    method: 'post',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({ foo: 'bar' })
});

fetchResponse.then((res) => res.json()).then(function(res) {
    // code...
})
【热门文章】
【热门文章】