AJAX使用包含文件的JSON对象发布到PHP

evv_gis

我正在尝试将文件附加到发布到我的PHP脚本的JSON对象内部的电子邮件中。

发布的JSON显示为:

{  
   data:{  
      "sendto":"[email protected]",
      "name":"John Smith",
      "contem":"[email protected]",
      "mess":"This is a test",
      "subj":"Test"
   },
   file:{  
      "webkitRelativePath":"",
      "lastModified":1389280265000,
      "lastModifiedDate":"2014-01-09T15:11:05.000Z",
      "name":"test.pdf",
      "type":"application/pdf",
      "size":6437
   }
}

我的PHP可以很好地处理所有“数据”属性,但是当我尝试检查文件时,我得到:

Notice:  Undefined index: file in My\Website\Location\script.php on line 20

第20行是:

$file = $_FILES['file'];

该索引是否在JSON对象中,是否未定义?

我也尝试过:

$file = $_FILES[json_decode(stripslashes($_POST['file']), true)];

考虑到文件位于JSON对象中,因此首先需要对其进行解码。但是,这返回了:

Warning:  Illegal offset type in My\Website\Location\script.php on line 20

我认为非法偏移量的问题与尝试将$ _FILES设置为JSON对象有关,是吗?

当我尝试将$ _POST ['file']设置为$ _FILES数组时:

$file = $_FILES[$_POST['file']];

我收到:

Notice:  Undefined index: {"webkitRelativePath":"","lastModified":1389280265000,"lastModifiedDate":"2014-01-09T15:11:05.000Z","name":"test.pdf","type":"application/pdf","size":6437} in My\Website\Location\script.php on line 20

将上传的文件显示为JSON对象。

我在这里想念什么?如何从我的AJAX帖子中获取上传的文件?

回答

如关于多表单/表单数据内容类型的说明,我更改了发送表单数据的方式。

而不是使用其中包含文件的对象:

var d = new FormData();
var data = {};
data.sendto = '[email protected]';
data.name = $('#puName').val();
data.contem = $('#puEmail').val();
data.mess = $('#puMess').val();
data.subj = 'User Permissions';
d.append('data', JSON.stringify(data));
$.each($('#puFile')[0].files, function(i, file) {
     d.append('file-'+i, file);
});
sendEmail(d);

我将FormData对象直接发送到PHP脚本。

function sendEmail(d){
    $.ajax({
        url: "script.php",
        data: d,
        cache: false,
        contentType: false,
        processData: false,
        type: 'POST',
        success: function () {
            alert("Cool");
        },
        error: function (e) {
            alert("Not Cool");
        }
    });
}

FormData由用于数据的JSON对象和选定的File组成。

PHP然后读取如下形式的数据:

$data = json_decode(stripslashes($_POST['data']), true);
$file = $_FILES['file-0'];

现在,我的电子邮件已正确发送。

迈克·布兰特

$_FILES仅当multipart/form-data为POST设置content-type时,才会创建superglobal,并且将包括要发布的实际文件,而不是对该文件的本地引用。相反,您正在发送JSON请求(希望具有适当的application/json内容类型)。这不会填充$_FILES除非您的接收脚本能够获取提供的路径信息并访问有问题的文件,否则您的POSTing脚本实际上将需要将文件作为POST的一部分发送。

最好使用特定的AJAX上传库来处理通过AJAX上传的文件,该库实际上是利用变通办法来解决的,因为您实际上无法真正在浏览器中本地异步发布文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Ajax .serialize()数据将表单发布到PHP?

来自分类Dev

使用jquery ajax将JSON发布到PHP

来自分类Dev

通过jQuery将JSON对象发布到php

来自分类Dev

使用AJAX发布到文本文件?

来自分类Dev

如何使用ajax发布将JSON数据传递到php

来自分类Dev

使用cURL时,数据未发布到php文件中

来自分类Dev

如何使用AJAX将数据发布到php文件

来自分类Dev

Ajax无法将数据完全发布到php文件

来自分类Dev

通过AJAX将数据发布到PHP文件

来自分类Dev

使用Axios将对象从React.js发布到PHP

来自分类Dev

使用Vanilla Javascript发布到PHP文件

来自分类Dev

使用AJAX发布将会话变量作为键值对传递到PHP文件

来自分类Dev

如何使用CURL发布包含图像和包含对象数组的JSON对象的多部分表单

来自分类Dev

如何使用AJAX将数组发布到PHP?

来自分类Dev

json对象发布到android应用中的php脚本

来自分类Dev

通过AJAX使用JSON数据发布到php

来自分类Dev

如何使用Ajax .serialize()数据将表单发布到PHP?

来自分类Dev

使用jquery ajax将JSON发布到PHP

来自分类Dev

使用Ajax将数组发布到PHP

来自分类Dev

通过jQuery将JSON对象发布到php

来自分类Dev

Ajax动态发布到PHP

来自分类Dev

如何使用PHP解码Json Array(将Ajax json发布到php无效)

来自分类Dev

将json文件发布到PHP

来自分类Dev

通过AJAX发布PHP中的Echo JSON对象

来自分类Dev

使用cURL时,数据未发布到php文件中

来自分类Dev

如何使用AJAX将数据发布到php文件

来自分类Dev

AJAX发布到.PHP到JSON数据集|| PHP文件

来自分类Dev

Cordova jquery ajax 发布到服务器 php 文件

来自分类Dev

如何在spring boot中使用ajax发布包含json格式文件和数据的表单

Related 相关文章

热门标签

归档