使用PHP的BLOB图像的Javascript AJAX上传。 $ _FILES为空 - javascript

嗨,我正尝试使用Javascript和PHP通过AJAX将BLOB图像上传到我的本地主机wampserver。

我正在尝试获取$_FILES中的图像,但是由于某些原因$_FILES为空。我已经设置了enctype并为php.ini检查了file_uploads = On

这是我的HTML表单:

<h1>CREATE A NEW ENTRY</h1>
<form name="insertForm" method="post" enctype="multipart/form-data">
  Name: <input type="text"  id="insert_name" /> <br />
  Age: <input type="text" id="insert_age" /> <br />
  WPM: <input type="text" id="insert_wpm" /> <br />
  Sex: <select id="insert_sex">
            <option>M</option>
            <option>F</option>
       </select><br />
  Photo : <input type="file" name="photo" id="insert_photo" /> <br />
  <input type="button" onClick="insertFunction()" value="UPDATE LIST" />
</form>
<br>
<br>
<div id="preview"><img id="preview_img" src="images/placeholder.png"/></div>
<div id="message"></div>

这是运行AJAX的javascript:

function insertFunction() 
{
    var ajaxRequest = createAjaxObject(); // checks for browser type and returns corres. ajax object    
    var name = document.getElementById('insert_name').value;
    var age = document.getElementById('insert_age').value;
    var wpm = document.getElementById('insert_wpm').value;
    var sex = document.getElementById('insert_sex').value;

    var image = document.getElementById('insert_photo').files[0];
    var imageType = image.type;
    alert(imageType);
    var match = ["image/jpeg", "image/png", "image/jpg"]

    if (!((imageType==match[0]) || (imageType==match[1]) || (imageType==match[2])))
    {
    document.getElementById('preview').innerHTML = '';
    document.getElementById('preview').innerHTML = '<img id="preview_img" src="images/noimage.png"/ alt="../images/noimage.png">';
    document.getElementById("message").innerHTML = "<p class='error'>Please Select A valid Image File</p>"+"<h4>Note</h4>"+"<span id='error_message'>Only jpeg, jpg and png Images type allowed</span>";
    }
    else
    {
    var reader =  new FileReader();
    reader.onload = function(e) {
        document.getElementById('preview').innerHTML = '';
        document.getElementById('preview').innerHTML = '<img id="preview_img" src="' + e.target.result + '" alt="' + e.target.result + '">';
    };
    reader.readAsDataURL(image);

    var dataString = "name=" + name + "&age=" + age + "&wpm=" + wpm + "&sex=" + sex + "&photo=" + image;

    ajaxRequest.open("POST", "insert-example.php", true);

    ajaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    ajaxRequest.send(dataString);
    document.getElementById('insertDiv').innerHTML = "processing...";

    ajaxRequest.onreadystatechange = function() {

        if (ajaxRequest.readyState == 4)
        {
        var insertDiv = document.getElementById('insertDiv');
        insertDiv.innerHTML = ajaxRequest.responseText;
        }
    }
   } 
}

这是更新本地主机的php。

<?php

    if ($_SERVER["REQUEST_METHOD"] == "POST")
    {
        $dbhost = "localhost";
        $dbuser = "root";
        $dbpassword = "";
        $dbname = "ajaxtutorial";

        $link = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname);

        if (mysqli_connect_errno())
        {
            echo "Connection failed: %s" . mysqli_connect_error();
        }

        mysqli_connect($dbhost, $dbuser, $dbpassword) or die(mysql_error());
        mysqli_select_db($link, $dbname) or die("Cannot connect to database");

        $name = mysqli_real_escape_string($link, $_POST['name']);
        $age = mysqli_real_escape_string($link, $_POST['age']);
        $wpm = mysqli_real_escape_string($link, $_POST['wpm']);
        $sex = mysqli_real_escape_string($link, $_POST['sex']);

        // Image file code below

        if (false) 
        {
            $photo = $_FILES["photo"];
            echo $photo;
        }

        else
        {   
            echo var_dump($_FILES);
        }       
    }
?>

我从var_dump获得的输出是:

  数组(大小= 0)
  空的

有人可以告诉我我的代码出了什么问题吗?

参考方案

尝试使用jQuery,方法更简单:(因此,请使用此脚本替换js文件中的所有内容,并保留HTMLPHP

      $.ajax({
        type: 'post',
        url: 'update.php', //php script
        data: new FormData($('form')[0]), //form data
        processData: false,
        contentType: false,
        success: function (result) {
          //do something cool when it is succesfully updated
      });

PS:不要忘了在脚本之前包含此内容,因为它是jQuery:<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.2.min.js">

如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript

我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…

在JavaScript函数中转义引号 - javascript

我正在尝试将变量传递给javascript函数。根据用户的选择,它可以是文本或图像。这里已经讨论了类似的问题,但我无法解决。在php中,我这样编码:if ($choice == 1) { $img = '<img src = "../folder/'.$_SESSION["img"].'�…

打印二维阵列 - javascript

我正在尝试打印子元素。在this example之后。怎么做?。$myarray = array("DO"=>array('IDEAS','BRANDS','CREATIVE','CAMPAIGNS'), "JOCKEY"=>a…

使用JS和PHP更改弹出窗口背景图像 - javascript

我有一个JS函数:function zoom(now) { document.getElementById("popup").style.display = "block"; document.getElementById("photos").style.backgroundImage = …

变更事件时道具无法正常工作 - javascript

我有一些代码,当用户从下拉列表中选择一个项目时,这会触发一个change事件,然后调用php页面进行处理。首次加载页面时,我选择一个项目,并在触发change事件时,这应更改所选select输入的占位符并禁用相同的输入:“#box_ffrtv”。但是,发生的事情是更改仅在我在下拉菜单中进行了第二选择之后才发生,然后更改了占位符并禁用了输入。我对jquery还…