你知道么,HTTP协议管不着我们上传数据用哪种编码!是不是觉得很意外?
咱们得研究POST提交数据,这儿头有两个原因:第一个就是Content-Type; 第二个,就是得知道发过去的数据哪儿去了。你发出请求的时候,服务器看了下Content-Type参数,就知道你传的东西长什么样,然后就把它解析出来啦
想试一下这种方法吗?如果你没有设置好浏览器默认的 form 表单里的 enctype 属性的话,它会给你选择用 application/x-www-form-urlencoded 的方式来传输数据哟~别忘了,Content-Type 会告诉你,实际上数据它是采用 multipart/form-data 格式编码的,而且还有个特殊的边界标签。最有意思的就是,消息主体居然能按照字段数量分段,每段都以 ————— boundary为开始,然后写下内容说明,再回车换行,最后才出现真正的字段内容~
POST http://www.example.com HTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=utf-8 title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
话说回来了,到底为啥我们要换新提交方式?这个问题可不小!你看现在网上好多网站,甚至WebAPP也在用Ajax来传数据。那么咱们干嘛还费劲去探索别的新方法,让编程变得更顺手点不行吗?
POST http://www.example.com HTTP/1.1 Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="text" title ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="file"; filename="chrome.png" Content-Type: image/png PNG ... content of chrome.png ... ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
你听说过有人用消息主体代替请求头吗?对,就是把那东西变成了JSON字符串。别看不起JSON,它可不止是键和值这么简单,还能处理各种复杂的数据结构。之前我做项目时,要传给服务器好多层次的数据,最后直接转换成JSON送上去了,省事儿又快!
记住有些服务器上的编程语言可能不支持这种方法,比如PHP就是这样。这种情况下,你就得自个想法子解决啦:比如如果看到HTTP头里边的Content-Type显示的是那个叫什么“application/json”的话,那么找php://input这个地方就能找到原始的输入流了,然后把它变成一个对象就ok!
哈喽,你还可以用AngularJS设置成用x-www-form-urlencoded的方式来传输数据。听说市面上都能找到好多好用的JavaScript库就连处理XML-RPC服务也毫不费力!
先弄清楚咋提交数据呗?这个其实不强制看具体情况。无论如何,别忘了遵守规则今儿咱们就聊聊这事儿,感受如何?如果有啥想法或疑惑,赶紧在评论里留言!别忘了给个赞再分享出去,让大家一起讨论!
var data = {'title':'test', 'sub' : [1,2,3]}; $http.post(url, data).success(function(result) { ... });
POST http://www.example.com HTTP/1.1 Content-Type: application/json;charset=utf-8 {"title":"test","sub":[1,2,3]}
评论0