首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过XHR发送FormData后$_REQUEST始终为空

通过XHR发送FormData后,$_REQUEST始终为空的原因是因为FormData对象默认使用"multipart/form-data"作为Content-Type,而不是"application/x-www-form-urlencoded"。在这种情况下,PHP的$_REQUEST变量无法正确解析请求数据。

要解决这个问题,可以通过以下几种方式:

  1. 使用$_POST或$_FILES变量:由于FormData对象默认使用"multipart/form-data",可以使用$_POST或$_FILES变量来获取请求中的数据。例如,使用$_POST['key']来获取表单字段的值,使用$_FILES['file']来获取上传的文件。
  2. 使用$_SERVER['CONTENT_TYPE']判断Content-Type:可以通过检查$_SERVER['CONTENT_TYPE']变量来确定请求的Content-Type。如果是"multipart/form-data",则使用$_POST或$_FILES变量;如果是"application/x-www-form-urlencoded",则可以使用$_REQUEST变量。
  3. 使用$_SERVER['REQUEST_METHOD']判断请求方法:可以通过检查$_SERVER['REQUEST_METHOD']变量来确定请求的方法。如果是POST请求,可以使用$_POST或$_FILES变量;如果是GET请求,可以使用$_GET变量。
  4. 使用其他库或框架处理请求:除了原生的PHP,还可以使用其他库或框架来处理请求,例如Laravel、Symfony、CodeIgniter等。这些库或框架通常提供了更方便的方法来处理FormData请求。

总结起来,通过XHR发送FormData后,$_REQUEST始终为空的问题可以通过使用$_POST或$_FILES变量、检查$_SERVER['CONTENT_TYPE']和$_SERVER['REQUEST_METHOD']变量,或使用其他库或框架来处理请求来解决。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

写给新手前端的各种文件上传攻略,从小图片到大文件断点续传

解析 客户端发送请求到服务器,服务器会收到请求的消息体,然后对消息体进行解析,解析出哪是普通表单哪些是附件。...可能大家马上能想到通过正则或者字符串处理分割出内容,不过这样是行不通的,二进制buffer转化为string,对字符串进行截取,其索引和字符串是不一致的,所以结果就不会正确,除非上传的就是字符串。...ctx.request.files.f1 得到文件信息,f1input file 标签的 name 获得文件的扩展名,重命名文件 NODE /** * 服务入口 */ var http = require...blob.size){//截取的数据 则结束 //拆分结束 break; } chunks.push...blob.size){//截取的数据 则结束 //拆分结束 break; }

3.2K30

ajax全套

2、登陆时,提示用户名密码错误 3、删除数据行时,将行ID发送到后台,后台在数据库中删除,数据库删除成功,在页面DOM中将数据行也删除。...* 关于“预检” 1 2 3 4 5 6 7 - 请求方式:OPTIONS - “预检”其实做检查,检查如果通过则允许传输数据,检查不通过则不再发送真正想要发送的消息...i1=12&i2=19'); //发送请求头,参数方式和url xhr.send(); //发送请求体 */ //post方式提交,要改一下请求头...对象中,让再把FormData对象放到XMLHttpRequest对象中,FormData对象有兼容性限制,错点,易漏点看代码注释;伪ajax上传文件,ifram+form不存在兼容性问题 views...对象中,让再把FormData对象放到XMLHttpRequest对象中 function upload1() { var formData=new FormData(); /

3K20
  • 前端处理图片上传的几种方式

    那么怎么使用ajax上传图片呢,这里就用到了一个叫做formData的方法。官方是这样解释的:通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对。...如果你把表单的编码类型设置multipart/form-data ,则通过FormData传输的数据格式和表单通过submit() 方法传输的数据格式相同,总之就是一句话,可以代替表单上传数据和文件。...我们还可以通过HTML表单创建FormData对象: var formElement = document.querySelector("form"); var request = new XMLHttpRequest..."); formData.append("serialnumber", serialNumber++); request.send(formData); 这样你就可以在发送请求之前自由地附加不一定是用户编辑的字段到表单数据里...FormData里面;而是new 一个FormData,读取input:file元素的 files[0]属性,并通过FormData实例的append方法将其塞入数据里;然后发送;这种方式可以不用设置enctype

    5K61

    Node+Vue 实现大文件上传,断点续传等

    数据格式:form-data; 传递的数据:file 文件流信息;filename 文件名字 通过 fileRead.readAsDataURL(file) 转为 base64 字符串, 用 encodeURIComponent...yarn add fs-extra 复制代码 FormData.append() 发送数据用到了 FormData formData.append(name, value, filename),其中 filename..., hash 当上传成功,记录上传成功的标识 当我们暂停或者发送失败,可以重新发送没有上传成功的切割文件 代码 <input v-if="!...this.<em>request</em>({ url: "http://localhost: 3000", data: formData }) ); await Promise.all(requestList...前后端都约定好,每个缓存从生成开始,只能存储12小时,12小时自动清理 (时间差问题) 秒传 原理:计算整个文件的HASH,在执行上传操作前,向服务端发送请求,传递MD5值,后端进行文件检索。

    2.8K40

    Ajax与Comet

    ()方法并不会真正发送请求,而只是启动一个请求以备发送 xhr.send("请求主体发送的数据"); 说明: (1)如果不需要通过请求主体发送数据(比如get请求),则必须传入null,因为这个参数对有些浏览器来说是必需的...(2)调用send()之后,请求就会被分派到服务器 补充:xhr.open()方法“false”,即同步请求,JavaScript代码会等到服务器响应再继续执行;否则,继续执行后续代码。...在收到服务器响应,相应的数据会自动填充XHR对象的属性。...FormData // 创建FormData对象 var data = new FormData(); data.append("name", "ligang"); // 用表单元素填充 xhr.open...超时设定 IE8XHR对象添加了一个timeout属性,表示请求在等待响应多少毫秒就终止。

    66332

    原生js上传文件 发送JSON,XML,对请求的表单进行URL编码详解

    默认情况下HTML表单通过POST方法发送给服务器,而编码的表单数据请求主体。 规则:使用URL编码,使用等号把编码的名字和值分开,并使用&符号将名/值对分开。...data) return ''; // 如果传入,直接返回字符串 var pairs = []; // 保存名/值对 for(var name in data) { // 进行遍历 if (...= new XMLHttpRequest(); request.open('post', url); // 对指定的url发送POST请求 request.onreadystatechange...multipart/form-data请求主体 XHR 一种简称,全称为XMLHttpRequest 将会以一个字节一个字节发送 function postFormData(url, data, callback...(name, value); // 添加键值对作为子节点 } // 由于使用FormData将会自动设置头部信息 // 将键值对作为主体进行发送 request.send(formdata);

    4.6K40

    FormData使用方法详解

    2、异步上传文件 一、创建formData对象 1、创建一个对象: //通过FormData构造函数创建一个对象 var formdata=new FormData(); //可以通过append(...,返回值数组类型 formdata.getAll("age"); 2、通过append(key,value)在数据末尾追加数据 //通过FormData构造函数创建一个对象 var formdata...name的所有值 console.log(formdata.getAll("name"));//["laoli"] 4、通过has(key)来判断是否存在对应的key值 //通过FormData构造函数创建一个对象...("age"));//false 5、通过delete(key)可以删除数据 //通过FormData构造函数创建一个对象 var formdata=new FormData(); //通过append...//删除keyname的值 formdata.delete("name"); console.log(formdata.get("name"));//null 三、通过XMLHttpRequest发送数据

    1.8K30

    大文件分片上传 轻松拿捏

    antd的上传组件有一个上传前的钩子,里面是可以拿到file信息,上传前将file切片,然后包装成一个一个的请求,放到一个数组,上传的的时候将数组的请求执行就可以了,执行完发送一个合并请求,我没有用Promise.all...对大文件先通过slice进行切片 核心是利用 Blob.prototype.slice 方法 createFileChunk接收两个参数 dataSource:所上传的File大文件,size:每个分片大小...data) => { const { hash, file } = data; const formData = new FormData(); formData.append...('chunk', file); formData.append('hash', hash); return () => this.request...: this.createProgressHandler(data, hash), }); }; 复制代码 每个分片创建一个http请求 this.request 方法通过

    1.2K20

    聚是一团火散作满天星,前端Vue.js+elementUI结合后端FastAPI实现大文件分片上传

    elementUI上传时,通过分片大小的阈值对文件进行切割,并且记录每一片文件的切割顺序(chunk),在这个过程中,通过SparkMD5来计算文件的唯一标识(防止多个文件同时上传的覆盖问题identifier...,当前端将所有的分片文件都发送完毕,最后请求一次后端另外一个接口,后端将所有文件合并。    ...} } // 文件开始上传 xhr.send(item.formData...启动后端服务测试一下效果: uvicorn main:app --reload     可以看到,当我们上传一张2.9m的图片时,前端会根据设置好的的分片阈值将该图片切割四份,传递给后端接口uploadfile...,后端在根据参数用接口mergefile将其合并,整个过程一气呵成、行云流水、势如破竹,让人用了之后禁不住心旷神怡、把酒临风。

    1.6K30

    XMLHttpRequest使用指南大全

    新增formData对象,支持发送表单数据; 发送和获取数据时,可以获取进度信息; 可以设置请求的超时时间(总时间,之前一直以为是请求建立的时间~); 当然更详细的对比介绍,可以参考阮老师的这篇文章,...new FormData(); formData.append('username', 'johndoe'); formData.append('id', 123456); //创建xhr...xhr.send(formData); } 上面是一个使用xhr发送表单数据的示例,整个流程可以参考注释。...但大家是否遇到过这样的场景:在发送跨域请求时,cookie并没有自动加在request header中。...另外,要特别注意一点,一旦跨域request能够携带认证信息,server端一定不能将Access-Control-Allow-Origin设置*,而必须设置请求页面的域名。

    1.3K30

    AJAX 原理与 CORS 跨域

    后面也会讲到,除IE之外的浏览器通过XHR对象实现跨域请求,只需将url设置绝对url即可。...当初始化请求完成,我们调用 send()方法发送请求: var data = new FormData(); data.append('name', 'Nicholas'); // 接受一个请求主体发送的数据...在 XHR2级中定义了 FormData数据,用于常见的类表单数据序列化: // 直接传入表单id var data = new FormData(document.getElementById('user-form...超时 xhr.timeout = 1000; // 1分钟,单位ms xhr.ontimeout = function () {}; 在请求 send()之后开始计时,等待 timeout时长...)定义头部 不能传递cookie 调用getAllResponseHeaders(),结果 其余跨域方法 上面的两种方法已经很成熟了,但是仍然有一部分方法可以跨域,比如 图像Ping: var img

    1.4K21

    AJAX 与跨域通信(一):AJAX

    name=Sam&job=coder,表示要查询的特定资源;POST 请求用于向服务器发送要保存的数据,数据存放的位置通过 send() 方法的参数来指定。...请求 URL:可以是相对路径和绝对路径 是否异步请求:true 异步,false 同步。...这个方法要在 open() 和 send() 之间调用 3.4 发送请求 xhr.send(null) // 或者 xhr.send(data_holder) 3.5 处理响应 目前为止,我们只是发送了请求...); 4.2 超时设定 xhr.timeout 指定一个毫秒单位的时间,一旦浏览器在这个规定的时间内没有收到响应,就会触发 timeout 事件,执行回调函数。...return in a second"); }; xhr.send(null); 注意:这时候很可能出现一种情况,就是超过1秒浏览器没收到响应,因此终止了请求,而这时候恰好 xhr.status

    88320

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券