ajax中post提交对象问题?

一般常规的是提交这种{a:1,b:2}数据,如果我要提交{a:1,b:2,c:{d:3,e:{f:5}}}这种内嵌对象的该怎么做?

阅读 9.8k
5 个回答

axios默认的contentType是application/json.是支持你这种格式
如果你改了application/x-www-form-urlencoded的话.你要将有内嵌对象的字段JSON化

第一种
http头设置成

Content-Type: application/json

这种JSON数据可以格式化为JSON字符串提交

第二种
http头设置成

Content-Type: application/x-www-form-urlencoded

这时候就要传一个key进去,并且js对象也需要格式化成JSON字符串,大概这个样子

data=JSON.stringify({a:1})

内嵌对象和普通对象并没有什么本质上的区别,ajax提交数据都需要json化。
如下是我封装的ajax方法,请参考 xhr.setRequestHeader("Content-type", "application/json");JSON.stringify(data) 部分

function ajax(url, method, data, callback){
    var xhr = new XMLHttpRequest();
    xhr.timeout = 3000;
    xhr.ontimeout = function(){
        console.log('网络超时, 请稍后重试!');
    };
    xhr.onload = function(){
        var s = xhr.status;
        if((s >= 200 && s < 300) || s == 304){
            var res = xhr.responseText;
            typeof callback == 'function' && callback(res);
        }
    };
    xhr.onerror = function(){
        console.log('网络问题, 请稍后重试!');
    };
    data = (method != 'GET' && typeof data=='object')?JSON.stringify(data):null;
    xhr.withCredentials = true;
    xhr.open(method, url, true);
    xhr.setRequestHeader("Content-type", "application/json");
    try{
        xhr.send(data);
    }catch(e){
        console.log('网络不佳, 请稍后重试!');
    }
}
ajax('你的链接','POST',你的数据,执行成功后的回调);

看你用什么提交了,想jquery这种会帮你做自动字符串化的就可以直接扔进去。

做一个JSON.stringify操作就行了,后端再自行转回来就可以了。

常规的和你要提交的数据在本质上没有区别吧

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