jQuery.ajax设置请求头实现post请求发送数据的格式(Form Data和Request Payload)

 Request Payload 请求头部的 Content-Type: application/json,请求正文是一个 json 格式的字符串

Form Data 请求头部的 Content-Type: application/x-www-form-urlencoded,请求正文是类似 get 请求 url 的请求参数

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>ajax设置请求头</title>
</head>
<body>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript">
    $(function() {
        var myAction = {};

        $.extend(myAction, {
            test: function() {
                $.ajax({
                    url: 'http://10.10.10.52/api/v1/tasks/a956d066-a6e2-11e8-828e-000c29af35cf',
                    type: 'put',
                    dataType: 'json',
                    //data: JSON.stringify({data:{status: "start"}}),
                    data: {name: "xu", foo: 'bar'},
                    cache: false,
                    headers: { 
                        "Authorization":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrZW4iLCJpYXQiOjE1Mzc1NTQzMDksImRhdGEiOnsidXNlcm5hbWUiOiJ4dXRvbmdiYW8iLCJpc19zdXBlcnVzZXIiOjEsImlkIjoxNywibG9naW5fdGltZSI6MTUzNzU1NDMwOX0sImV4cCI6MTUzODE1NDMwOX0.32Lys4hjjY2XRpM2r9YSmpYA798u821m_M5Tzb6wxIU",
                        'Content-Type': 'application/x-www-form-urlencoded'  //multipart/form-data;boundary=--xxxxxxx   application/json
                    },                
                    success: function(res){
                        if (res.code === 200) {
                            
                        }   
                    },
                    error: function(e) {

                    }
                });
            }
        });

        var init = function() {
            myAction.test();
        }();
    })
    </script>
</body>

</html>

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>ajax设置请求头</title>
</head>
<body>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript">
    $(function() {
        var myAction = {};

        $.extend(myAction, {
            test: function() {
                $.ajax({
                    url: 'http://10.10.10.52/api/v1/tasks/a956d066-a6e2-11e8-828e-000c29af35cf',
                    type: 'put',
                    dataType: 'json',
                    data: JSON.stringify({data:{status: "start"}}),
                    //data: {name: "xu", foo: 'bar'},
                    cache: false,
                    headers: { 
                        "Authorization":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrZW4iLCJpYXQiOjE1Mzc1NTQzMDksImRhdGEiOnsidXNlcm5hbWUiOiJ4dXRvbmdiYW8iLCJpc19zdXBlcnVzZXIiOjEsImlkIjoxNywibG9naW5fdGltZSI6MTUzNzU1NDMwOX0sImV4cCI6MTUzODE1NDMwOX0.32Lys4hjjY2XRpM2r9YSmpYA798u821m_M5Tzb6wxIU",
                        'Content-Type': 'application/json'  //application/x-www-form-urlencoded  application/json
                    },                
                    success: function(res){
                        if (res.code === 200) {
                            
                        }   
                    },
                    error: function(e) {

                    }
                });
            }
        });

        var init = function() {
            myAction.test();
        }();
    })
    </script>
</body>

</html>

开源项目地址:

https://github.com/xutongbao/learn-chatgpt

### jQuery AJAX POST 提交数据在服务器端 Request 对象中的具体位置 当使用 `jQuery.ajax()` 方法以 POST 方式提交数据时,这些数据会根据请求的配置被放置到不同的地方。以下是详细的解析: #### 1. **默认情况下** 如果未指定特殊选项(如 `processData` `contentType`),则传递给 `data` 参数的内容会被序列化为 URL 编码字符串,并作为请求体的一部分发送至服务器[^3]。这种情况下,在服务器端可以访问 `Request.Body` 或者框架特定的对象(例如 ASP.NET 的 `HttpContext.Request.Form`)来获取这些参数。 ```javascript $.ajax({ url: 'example.com/api', type: 'POST', data: { key1: 'value1', key2: 'value2' } }); ``` 上述代码中,`key1=value1&key2=value2` 将成为请求负载(request payload),并通常可以在服务端通过解析表单(form-data)的方式读取它。 #### 2. **自定义 Content-Type processData 设置** 如果有如下设置: - `processData: false`: 防止自动转换传入的数据成查询字符串。 - `contentType: false`: 不设定 HTTP 请求头部字段 `Content-Type`。 这允许开发者手动控制如何构建请求主体以及其对应的 MIME 类型。比如上传二进制文件或者 JSON 数据的时候就需要这样的灵活性[^2]。 对于这种情况下的文件上传实例而言,由于采用了 `FormData` 构造函数创建了一个新的形式化的数据集,因此浏览器不会将其转化为传统的 query string 形式的 body;而是保持原始格式直接传输过去。此时应该依据实际使用的编程语言及其 web 库特性去定位相应的部分——一般也是位于 `request.body` 下面,不过可能需要用额外的方法提取 multipart/form-data 组件里的各个片段。 ```javascript var formData = new FormData(); formData.append('file', $('#uploadFile')[0].files[0]); $.ajax({ url: '/upload', type: 'POST', data: formData, processData: false, contentType: false }); ``` 在这种场景下,接收方需按照多部件编码(multipart encoding)的标准处理流程对待接收到的信息包。 #### 3. **JSON 格式的数据提交** 假如希望传送的是 JavaScript Object Notation(JSON)-style 的结构化资料,则应调整相应属性以便正确指示客户端服务端之间的协定: ```javascript $.ajax({ url: "/api", method: "POST", headers: {"Accept": "application/json", "Content-Type":"application/json"}, data: JSON.stringify({name:"John Doe"}) }) ``` 在此种情形之下,后端应当期待着从输入流里解码出 json 文本表示法所描述的消息实体。 综上所述,基于不同类型的荷载(payloads), 它们各自存放在 server-side request object 的确切部位有所差异. ### 示例代码展示 下面给出一段 PHP 脚本来演示如何捕获由 jquery 发起的不同种类 post requests 所携带过来的有效负荷(paylaods). ```php <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (!empty($_FILES)) { echo "Handling file upload."; $tmp_name = $_FILES["file"]["tmp_name"]; move_uploaded_file($tmp_name, "./uploads/" . basename($_FILES["file"]["name"])); } elseif (getallheaders()['Content-Type'] == 'application/json') { echo "Processing JSON Data"; $inputJSON = file_get_contents('php://input'); $input= json_decode( $inputJSON , TRUE ); //convert JSON into array foreach ($input as $key => $val){ echo "$key :$val<br>"; } }else{ echo "Standard Form Submission"; print_r($_POST); } } ?> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐同保

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值