【问题标题】:Ajax POST format with PHP使用 PHP 的 Ajax POST 格式
【发布时间】:2016-08-09 06:06:36
【问题描述】:

我有一个表单,我想在其中有一个“虚拟表单”,用于处理文件附件。我有一个文件输入和一个按钮来发送文件。

问题是我的 PHP 支持只获取 POST 并且具有结构:

"file"; filename="xxx.jpg"
Content-type: image/jpeg

.
.
.

其中的点代表文件中的二进制数据。

根据我的阅读,应该是 $_FILES$_POST 变量,但我不明白。

以下是 HTML 和 Javascript 中的相关代码行:

<input type="file" id="file-to-append" name="file-attachment">
<input type="button" onClick="append_file()" value="Add file">

function append_file() {
var formData = new FormData();


console.log(jQuery('#file-to-append'));
  formData.append('file', jQuery(":file")[0].files[0]);

  jQuery.ajax({
       url : 'file_upload.php',
       type : 'POST',
       data : formData,
       processData: false,
       success : function(data) {
           console.log(data);
           alert("Added");
       }
  });
}

有人能发现或知道问题出在哪里吗?

【问题讨论】:

  • 我打赌你的form 标签中没有enctype 属性。
  • 发布您的完整表格..
  • enctype 在这种情况下无关紧要
  • 请同时添加您的 PHP 代码
  • PHP 代码目前只是 $_POST 和 $_FILES 的 print_r。当这些给出正确的值时,我知道该怎么做。 (实际上是那些的 file_put_contents,因为这是一个“后端调用”)

标签: javascript php ajax post


【解决方案1】:

数据正确传递,因此您的 Ajax 调用没有问题。

您在 PHP 中使用超级全局 $_FILES 获取文件对象。

在你的情况下,你会像这样使用它:

$file = $_FILES['file'];
echo $file['name'];
echo $file['tmp_name'];
.
.
.

要查看$_FILES 数组,您可以:

echo "<pre>";
print_r($_FILES);
echo "</pre>";

【讨论】:

    【解决方案2】:

    事情变得越来越陌生。我让它工作了,但只能在 IE 11 上通过设置 contentType: 'multipart/form-data' 使用 Chrome,它在该设置下根本不起作用。

    我尝试过 contentType: false,但它在任何一个平台上都不起作用,尽管它应该是正确的做法(TM):/。

    我还在外部表单中添加了 enctype-setting,但我想知道它有什么帮助,因为我没有提交(整个表单),而只是在主表单“内部”添加东西(我自己处理)。显然它也没有帮助。

    这应该不是问题,但由于某种原因,我一直坚持使用这个 ajax 实现,尽管我很久以前就使用过文件上传(两位数)...

    汉克

    【讨论】:

      【解决方案3】:

      在表单中使用正确的加密

      <form id="data" enctype="multipart/form-data" method="post" >
      <input type="submit"  value="Add file">
      </form>
      

      使用ajax提交

      $("form#data").submit(function() 
      {var formData = new FormData($(this)[0]);
      $.ajax({
      
                          url: "filename.php",
                          type: 'POST',
                          data: formData,
                          async: false,
                          success: function (data) 
                          {
                                  var jsonData = $.parseJSON(data);
                                 var errFlag =jsonData.errorFlag;
                                  var errMsg  =jsonData.errorMessage;
      
                                  if(errFlag == 1)
                                  {   
                                      //successmessage;
                                  }
                                  else
                                  {
                                      //errormessage;
                                  }
                          },
                          cache: false,
                          contentType: false,
                          processData: false
      
                      });
                      return false;
      
      
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        相关资源
        最近更新 更多