将Ajax文件上传到php文件会出错4

时间:2016-08-29 09:23:20

标签: javascript php jquery ajax

在我的网页上我有这样的表格:

class MySpider(scrapy.Spider):
    name = "myspider"
    start_urls = (
        'http://scrapy.org',
    )

    def start_requests(self):
        headers= {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0'}
        for url in self.start_urls:
            yield Request(url, headers=headers)

如您所见,有一个文件输入和两个下拉列表。 我需要通过Ajax将这些信息传递给名为'upload'的php文件。

所以我在Jquery中写这个脚本:

<form style="width:100%; clear:both; margin-top:50px; background:#fff; border:1px solid green" id="upload_form" enctype="multipart/form-data" class="form" action="" method="post">
    <fieldset>
        <input name="somefield" style="display:none" value="">
        <ul style="width:100%; padding:0 20px">

            <li>
                <label>Upload</label>
                <input  type="file" name="upload" id="upload" required accept=".pdf, .doc"/>
            </li>

            <li>
                <label>Language </label>
                <select name="language">
                <!-- SOME OPTIONS -->
                </select>
            </li>

            <li>
                <label>Category </label>
                <select name="category">
                 <!--SOME OPTIONS-->
                </select>
            </li>

            <li class="privacy">
                <input style="margin-top:22px; " name="submit2" class="button" type="submit" value="Save" />
            </li>
        </ul>
    </fieldset>
</form>

对于测试,这是我的upload.php文件中的内容

    $(document).ready(function() 
    {  
        // Form Upload
        var uploadForm = $("#upload_form");
        var formData = new FormData(uploadForm[0]);
        // submit action
        uploadForm.submit(function(e) {
            e.preventDefault();

            $.ajax({
                url: 'upload.php',
                data: formData,
                type: 'POST',
                contentType: false,
                processData: false,
                success: function(d) {
                    alert(d);
                }
            });

        });         
    } 
); 

在警告框中,我收到此输出:

print_r($_FILES); die(); // Testing 

如何在同一个Ajax Call中提交所有表单? 这是正确的方法吗? 我应该设置两个不同的ajax调用吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。 这是我犯的一个愚蠢的错误。

这是正确的脚本:

    // Form Upload 
    var uploadForm = $("#upload_form");

    uploadForm.submit(function(e) {
        e.preventDefault();
        // Moved inside  
        var formData = new FormData(uploadForm[0]); 
        console.log(formData);

        $.ajax({
            url: 'function/upload.php',
            data: formData,
            type: 'POST',
            contentType: false,
            processData: false,
            success: function(d) {
                console.log(d);
            }
        });

    });

它给了我这个输出:

    Array
(
    [upload] => Array
        (
            [name] => somefile.pdf
            [type] => application/pdf
            [tmp_name] => /tmp/phpB3t2vF
            [error] => 0
            [size] => 2444
        )

)