setRequestHeader

setRequestHeader

  1. 我们在send之前为什么要设置请求头信息, 是希望在没有与后端口头约定的前提下,把自己伪装成一个表单?Content-Type的默认值不是application/x-www-form-urlencoded吗?

xhr.setRequestHeader(
     'Content-Type',
    'application/x-www-form-urlencoded'
);


2. html的表单里不是都已经设置过了enctype="application/x-www-form-urlencoded",为什么我们还要用js代码再重新设置一次?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小李 2022-01-21 17:53:06

同学你好,解答如下:

1、请求头设置需要看需求,比如后端规定的接到POST请求,必须是application/x-www-form-urlencoded的形式提交到后端,后端才会解析成key1=val1&key2=val2。并非是伪装成一个表单。Content-Type的默认值是application/x-www-form-urlencoded。这里设置请求头因为是知识点所以才写上的。在工作中具体的都是会跟后端进行协商,因为接口都是后台出的,他们需要什么数据类型会提前跟前端去对接,届时如果后端有需求说前端必须写明请求头,那么我们才会设置请求头。一般是不需要前端去设置请求头的。针对这个例子,删掉请求头依然是可以进行POST请求的如下:

https://img1.sycdn.imooc.com//climg/61ea81fd09151b5811720129.jpg

https://img1.sycdn.imooc.com//climg/61ea82060906cc1c08460125.jpg

https://img1.sycdn.imooc.com//climg/61ea81b10943307716700214.jpg

那么我们删掉了设置请求头为什么还可以进行POST请求,这是因为后端默认这个接口传过来的值就是application/x-www-form-urlencoded这种形式的,所以同学不用纠结,后端那边已经做了处理了。

2、enctype="application/x-www-form-urlencoded"的设置是以form表单提交的设置,js中设置

xhr.setRequestHeader(

     'Content-Type',

    'application/x-www-form-urlencoded'

);

是针对ajax提交方式的两者无关。

同学自己试试,祝学习愉快!

  • 提问者 慕九州9284067 #1

    2、enctype="application/x-www-form-urlencoded"的设置是以form表单提交的设置,js中设置

    xhr.setRequestHeader(

         'Content-Type',

        'application/x-www-form-urlencoded'

    );

    是针对ajax提交方式的两者无关。


    意思是我们用e.preventDefault()阻止了表单自动提交,然后用xhr.send(data)实现了ajax提交。这样我们的提交就与原本html的表单提交没关系了,表单里的enctype="application/x-www-form-urlencoded"就"作废了", 管不到我们的ajax提交的Content-Type了,所以需要单独再设置一次 'Content-Type'(如果我们想设置'Content-Type'的话)?

    2022-01-21 18:03:09
  • 好帮手慕小李 回复 提问者 慕九州9284067 #2

    同学你好,理解的没错。祝学习愉快!

    2022-01-21 18:07:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师