javascript - 在同一个 Ajax 调用中发送 $_POST[] 和 $_FILES[]

标签 javascript php jquery html ajax

我正在我的网站上进行图像上传帖子部分,但我正在努力上传带有日期的图像。我通过 $_POST 发送日期,并在 $_FILES 中发送图像文件。

这是我的代码(Javascript):

(function post_image_content() {
var input = document.getElementById("images"), 
    formdata = false;

function showUploadedItem (source) {
    var list = document.getElementById("image-list"),
        li   = document.createElement("li"),
        img  = document.createElement("img");
    img.src = source;
    li.appendChild(img);
    list.appendChild(li);
}   

if (window.FormData) {
    formdata = new FormData();
    document.getElementById("btn").style.display = "none";
}


input.addEventListener("change", function (evt) {
    var data = '';
    date = document.getElementById('image_date').value;
    if(date == ''){
        alert('Please select a date!');
        return 0;
    } else {
        data = 'date='+date;
    }

    document.getElementById("response").innerHTML = "Uploading . . ."
    var i = 0, len = this.files.length, img, reader, file;

    for ( ; i < len; i++ ) {
        file = this.files[i];

        if (!!file.type.match(/image.*/)) {
            if ( window.FileReader ) {
                reader = new FileReader();
                reader.onloadend = function (e) { 
                    showUploadedItem(e.target.result, file.fileName);
                };
                reader.readAsDataURL(file);
            }
            if (formdata) {
                formdata.append("images[]", file);
            }
        }   
    }

    if (formdata) {
        $.ajax({
            url: "submit_image.php",
            type: "POST",
            data: formdata + ' ' + data,
            processData: false,
            contentType: false,
            success: function (res) {
                $('#images').show();
                document.getElementById("response").innerHTML = res;
                hideImageUpload(); 
            }
        });
    }
}, false);
}());

function hideImageUpload(){
$('#image_upload_form').hide(250);
//$('#response').hide(250);
$('#image-list').hide(250);
}

还有 PHP:

<?php
require_once 'core/init.php';
$user = new User();
$errors = $_FILES["images"]["error"];
$date = $_POST['date'];

$date = explode("/", $date);
$newdate = $date[2] + '-' + $date[0] + '-' + $date[1];

foreach ($errors as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
    $name = $_FILES["images"]["name"][$key];
    //$ext = pathinfo($name, PATHINFO_EXTENSION);
    $name = explode("_", $name);
    $imagename='';
    foreach($name as $letter){
        $imagename .= $letter;
    }

    move_uploaded_file( $_FILES["images"]["tmp_name"][$key], "images/uploads/" . $user->data()->id . '_' . $imagename);

    $user->create('photos', array(
        'osid' => $user->data()->id,
        'user' => $user->data()->username,
        'gallery' => 'Uploads',
        'filename' => "images/uploads/" . $user->data()->id . '_' . $imagename,
        'date' => $newdate
    ));
}
}


echo "<h2>Successfully Uploaded Images</h2>";

我是Web开发新手,我正在使用PDO进入数据库。

最佳答案

等等... data: formdata + ' ' + data, 这有点令人困惑。您添加包含 url 编码数据的 FormData 对象和字符串。

将日期值附加到 formdata 对象:formdata.append('date', date)。之后,仅使用 data: formdata, 发送 AJAX 查询。

但可能还有更多错误。

要进行调试,请使用Chrome 开发者工具。您可以使用 debuggerconsole.log(something) 来设置断点并打印变量。此外,您始终可以使用逐步调试。

关于javascript - 在同一个 Ajax 调用中发送 $_POST[] 和 $_FILES[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21347942/

相关文章:

javascript - 在两个 Div 和网页之间切换焦点

javascript - 改进低效的 jQuery 选择器

php - 有没有办法像 PHP 一样自动将表单的输出转换为数组,但使用 jQuery/Javascript?

javascript - 验证名字和姓氏

jquery - 无法通过变量在jquery中设置css顶部和左侧值

jquery - 进行查询,但忽略给定元素的子元素,即使它们匹配

javascript - 如何删除字符串中的一系列索引位置?

javascript - 相对于另一个元素定位一个元素

javascript - 使用 Jquery 计算文本框值但不起作用

php - PHP 中的任何 STUN/TURN/ICE 客户端库?