无法弄清楚如何使用$ .ajax将表单数据发布到php

时间:2015-02-12 01:46:13

标签: php jquery ajax post

编辑: *更新代码以反映状态和当前问题*

我的HTML表单正确接受输入[type = file]。我知道我正在将适当的数据(file.name)附加到formData。我知道我的脚本archive_upload.php正在被调用,但这是出错的地方。 $_POST似乎没有接受任何事情。如果我在$len之后打印$len = (int) $_POST['CONTENT_LENGTH'];,则会显示0。

如何正确检索发送到我脚本的FormData?

这是我的JS:

var formData = new FormData();
var fileSelect = document.getElementById('file');
var uploadButton = document.getElementById('upload');
var form = document.getElementById('file_form');
/*$('#file').change(function() { });*/
form.onsubmit = function(event) {
    event.preventDefault();
    var files = fileSelect.files;

    for (var i=0; i<files.length; i++) {
        var file = files[i];
        if(!file.type.match('image.*')) {
            continue;
        }
        formData.append(i, file.name);
    }
    xhr = new XMLHttpRequest();
    xhr.open('POST', 'archive_upload.php');
    xhr.send(formData);
}

这是我的HTML:

<form id="file_form" action="archive_upload.php" method=POST  enctype=multipart/form-data accept-charset=utf-8>
    <input type="file" id="file" name="photos[]" />
    <button type="submit" id="upload">Upload</button>
</form>

PHP:

<?php
    $len = (int) $_POST['CONTENT_LENGTH'];
    $files = array();
    for ($i=0; $i < $len; $i++) {
        $f = $_POST[$i]['name'];
        $files.append($f);
    }
    $j = fopen('test.json', 'w');
    fwrite($j, json_encode($files));
    fclose($j);
?>

2 个答案:

答案 0 :(得分:1)

据我所知,它根本没有调用ajax页面,因此请考虑在ajax调用中添加以下代码段作为选项:

processData: false,
contentType: false,

我相信this post在文件[s]和FormData

的类似问题上有经验

答案 1 :(得分:1)

由于您使用Html表单和ajax来提交表单数据,最简单的方法是这样的:

<script>
$(document).ready(function(){
    $("#upload").click(function(){
        $.ajax({url: "<your url>",
                data: {<put your data here>}
                success: function(result){

                }
                cache: false,
                contentType: false,
                processData: false
    });
    });
});
</script>

HTML表单:

<form id="file_form" action="archive_upload.php" method=POST  enctype=multipart/form-data accept-charset=utf-8>
    <input type="file" id="file" name="photos[]" />
    <button type="button" id="upload">Upload</button>
</form>