2016-08-03 123 views
1

我是新来的网络发展,我一直有最新的问题是AJAX文件上传...

现在我有两个HTML输入字段;一个文件输入和一个按钮。

<input type="file" name="Frame" id="Frame_"/> 
 
<input type="button" name="FrameButton" id="FrameButton_" value="UPLOAD"/>

按钮被点击然后我打电话说有下面的代码功能后..

var frame = document.getElementById('Frame_'); 
 
var frameImg = frame.files[0]; 
 
var form_data = new FormData(); 
 

 
form_data.append('frame', frameImg); 
 

 
jQuery.ajax({ 
 
    url : './handler.php', 
 
    type : 'post', 
 
    data : form_data 
 
    contentType : false, 
 
    processData : false, 
 
    success : alert("Frame Uploaded") 
 
});

当我的var_dump()的$ _POST和$ _FILES数组显示两个数组都为空。尽管Chrome Dev中的“Request Payload”请求是

Content-Disposition:form-data; NAME = “框架”;文件名=“GoldFrame.jpg”

内容类型:image/JPEG

在其中我的印象是,这意味着文件的,我在前端选择成功是“的信息张贴“编辑我的handler.php文件。这是一个错误的解释?

无论哪种方式,有人可以给我一个答案我的问题?或至少指向可能有我的答案的资源?似乎有许多类似的问题,但我没有看到有一个确切的答案。

我在过去曾经使用iframe来处理这种事情,但这看起来像一个非常黑客的方法,并且我希望在将来能够灵活地使用ajax来处理这类任务。

帮助表示赞赏。

+0

这里;请访问http://php.net/manual/en/function.error-reporting.php,然后将其应用于您的代码。还请检查您的控制台。 –

+0

你设置了一个错误的内容类型,这意味着jquery不会发送任何类型。如果PHP没有看到适当的类型进来,它将不会假设表单/文件提交,并且不会解析/填充$ _POST/$ _ FILES的输入。您还将processData设置为false,因此您传递的对象将被** NOT **处理为正常提交。 –

+0

检查文件上传的内容类型。那里有一个错误。之后,您可以通过浏览器控制台检查Ajax调用是否正确。如果它给出了错误,那么你应该检查。 –

回答

1

试试这个。

(的index.html)

<form id="uploadForm"> 
    <input type="file" name="frame" /> 
    <input type="submit" value="UPLOAD" /> 
</form> 

脚本(的script.js)

$("#uploadForm").on('submit',(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     url: "handler.php", 
     type: "POST", 
     data: new FormData(this), 
     contentType: false, 
     cache: false, 
     processData: false, 
     success: function(data){ 
      console.log(data); 
     }   
    }); 
})); 

服务器端(处理程序。php)

<?php 

var_dump($_FILES); 
+0

$ _FILES数组包含文件!谢谢。在我以前的解决方案中,我有两个输入标签,但它们没有包含在

中。这就是为什么我的解决方案不起作用吗? – mbricep

+0

是的,当使用ajax时,你必须停止表单的默认提交,并让ajax处理你的请求。 –

0

你是var_dump() - 你的$ _FILES/$ _ POST数组在handler.php文件中吗?

如果您试图在具有ajax调用的文件中转储这些变量,它将无法工作,因为AJAX正在进行前端调用,并且文件/后期变量是服务器端变量...哪些意味着只有handler.php文件将有这些变量可用。

尝试在handler.php中添加var_dump()调用,并将结果输出到ajax调用中,我希望您会看到您正在查找的结果。

+0

感谢您的回复。我目前使用echo'debuggin info'; var_dump($ _ POST); var_dump($ _ FILES);在我的handler.php文件的顶部,并在Chrome开发人员控制台的网络选项卡中接收结果。如果我打印ajax调用的输出,结果会不同吗? – mbricep

+0

不,他们应该是一样的。好的。您是否可以发布handler.php脚本代码?这将有助于调试。 – MustafaG