使用Ajax将图像发送到数据库(php)而无需重新加载

我创建了一个bootstrap模式弹出窗体,在图库页面中添加图片,我开发了php和ajax代码,因为我想在这里没有页面重新加载: –

问题是,当我想将图像发送到数据库时,我显示此错误

Notice: Undefined index: photo in ....

我无法发送图片。

这是我的ajax代码

 $(function() { //twitter bootstrap script $("button#submit").click(function(){ $.ajax({ type: "POST", url: "image.php", data: $('form.contact').serialize(), success: function(msg){ $("#thanks").html(msg) $("#myModal").modal('hide'); }, error: function(){ alert("failure"); } }); }); }); 

这是Image.php文件

 include 'db.php'; if(isset($_POST['titre'])){ $titre = strip_tags($_POST['titre']); $image_name = $_FILES['photo']['name']; $image_tmp = $_FILES['photo']['tmp_name']; $image_size = $_FILES['photo']['size']; $image_ext = pathinfo($image_name, PATHINFO_EXTENSION); $image_path = '../images/'.$image_name; $image_db_path = 'images/'.$image_name; if($image_size < 1000000000){ if($image_ext == 'jpg' || $image_ext == 'png' || $image_ext = 'gif'){ if(move_uploaded_file($image_tmp,$image_path)){ $ins_sql = "INSERT INTO media (Images_md, Id_Pro, Value, Title) VALUES ('$image_db_path', '0', 'galerie', '$titre')"; if(mysqli_query($conn,$ins_sql)){ echo '
Success! Well done its submitted.
'; }else { echo '
Error ! Change few things.
'; } }else { echo '
Sorry, Image hos not been uploaded.
'; } } else { echo '
Please Add a jpg OR png OR gif Image.
'; } }else { echo '
Image File Size is much bigger then Expect.
'; } }

这是myModal代码:

  

你能帮我用ajax jQuery发送图片吗?

您需要在AJAX脚本中进行一些更改,例如:

  • 在AJAX请求中设置以下选项, processData: falsecontentType: false 。 从文档中 ,

    contentType (默认值: 'application/x-www-form-urlencoded; charset=UTF-8'
    类型: BooleanString
    将数据发送到服务器时,请使用此内容类型。 默认为“application / x-www-form-urlencoded; charset = UTF-8”,这在大多数情况下都适用。 如果您明确地将内容类型传递给$.ajax() ,那么它总是被发送到服务器(即使没有数据发送)。 从jQuery 1.6开始,你可以传递false来告诉jQuery不要设置任何内容类型标题。

    processData (默认值: true
    类型: Boolean
    默认情况下,作为对象传入数据选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,适合默认内容类型“application / x-www-form-urlencoded” 。 如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false

  • 如果您通过AJAX上传文件,请使用FormData对象。 但请记住,旧浏览器不支持FormData对象,FormData支持从以下桌面浏览器版本开始:IE 10 +,Firefox 4.0 +,Chrome 7 +,Safari 5 +,Opera 12+。

所以以下面的方式更改你的jQuery脚本,

 $(function(){ //twitter bootstrap script $("button#submit").click(function(){ $.ajax({ type: "POST", url: "image.php", data: new FormData($('form')[0]), processData: false, contentType: false, success: function(msg){ $("#thanks").html(msg) $("#myModal").modal('hide'); }, error: function(){ alert("failure"); } }); }); });