2016-04-26 33 views
1

我一直在上传图片和评论的表单。我用PHP工作,但现在我想用AJAX做。我想在AJAX中这样做的原因是,当上传失败时(由于条件如下:字段不能为空或图像的高宽比关闭),用户必须再次键入所有文本。然而无论我做什么,我都无法在AJAX中做到这一点。从AJAX发送图片

我试着在FormData中用$ .post和$ .ajax来做到这一点。我也查了很多指南和其他文章,但似乎没有任何效果。

下面你会发现HTML表单,jQuery AJAX调用以及来自AJAX调用的PHP页面的PHP代码。

HTML FORM

<form action="uploadpost.php" id="postForm" method="POST" enctype="multipart/form-data"> 
     <div class="form-group"> 
      <label for="postImage">Upload image</label> 
      <input type="file" id="fileToUpload" name="postImage" class="form-control"> 
     </div> 

     <div class="form-group"> 
      <label for="description">Write a caption</label> 
      <textarea name="description" id="postMessage" cols="30" rows="5" class="form-control"></textarea> 
     </div> 
     <input type="submit" id="postSubmit" value="Create post" name="upload_image" class="btn btn-primary"> 
    </form> 

的AJAX调用

<script type="text/javascript"> 
$(document).ready(function(){ 

    $("#postSubmit").on("click", function(e){ 
     var formData = new FormData($("#postForm")); 
     //var message = $("#postMessage").val(); 

     $.ajax({ 
      url: "ajax/postUpload.php", 
      type: "POST",    
      data: formData,    
      contentType: "multipart/form-data",  
      cache: false,    
      processData:false,   
      success: function(data) 
      { 
       console.log(data); 
      } 
     }); 
     e.preventDefault(); 
    }); 
}); 

Ajax中的PHP的代码/ postUpload.php

console.log(data)从上AJAX输出调用返回

<pre class='xdebug-var-dump' dir='ltr'> 
<b>array</b> <i>(size=0)</i> 
<i><font color='#888a85'>empty</font></i> 
</pre> 

的问题是,我无法发送图片,也没有消息过来说PHP页面,它不允许我做createPost()

+6

Sidenote on Stacks new color code scheme;它很糟糕。人.. 2种HTML格式的蓝色阴影?谁提出了这个想法? –

回答

4
var formData = new FormData($("#postForm")); 

到FORMDATA的参数应该是一个DOM形式对象,而不是jQuery对象。

new FormData($("#postForm")[0]) 

设置内容手动键入:

的contentType: “多/表单数据”,

...将无法在其设定的边界数据。说:

contentType: false, 

...因此,jQuery将不会尝试设置它,并且XHR对象将从FormData对象生成它。

+0

感谢您的快速响应!我已经测试过了,但是console.log(data)仍然给了我相同的输出。数组仍然是空的。 –

+0

是的,我已经尝试将其设置为false之前,输出保持不变,也许它是在postUpload PHP的一面? –

+0

它开始打开浏览器的开发者工具并检查请求是什么。 – Quentin