0

我的表单使用 javascript 警报与用户交流,因为这是我工作的公司的首选方法(与不断重定向到 php 处理程序文件和从 php 处理程序文件相反)。

因此,我通过 jquery 中的一些简单验证传递所有表单数据,并通过 ajax 将其发送到 php 处理程序。这是我如何做的基本情况......

var first_name = $(sender + ' #first_name');
var email = $(sender + ' #email');
var tel = $(sender + ' #telephone');
var comments = $(sender + ' #comments');

$.ajax({
    type: 'POST',
    url: 'sendmail.php',
    data: { first_name: first_name.val(),
        email: email.val(),
        telephone: tel.val(),
        comments: comments.val(),
        success: function clearFields() {
            first_name.val('');
            email.val('');
            tel.val('');
            comments.val('');
            alert('Thank you. We will contact you as soon as possible.');
        }
    }
});

将文件输入字段添加到如下这样的表单后,我在上传时遇到了问题。虽然电子邮件发送正确,但我认为 ajax 没有发送任何可用数据以上传到 php 文件

<input type="file" name="upload" id="upload" />

<script>

var upload = $("#upload");
$.ajax({
    type: 'POST',
    url: 'sendmail.php',
    data: { first_name: first_name.val(),
        email: email.val(),
        telephone: tel.val(),
        upload: upload.val(),
        comments: comments.val(),
        success: function clearFields() {
            first_name.val('');
            email.val('');
            tel.val('');
            upload.val('');
            comments.val('');
            alert('Thank you. We will contact you as soon as possible.');
        }
    }
});
</script>

我为此找到了许多选项,但是我看过的所有选项对我来说似乎都是“骇人听闻的”。

有没有更简单的方法来做到这一点?

4

2 回答 2

1

Ajax 不支持file上传操作。但是有很多插件使用 iframe 来异步上传文件。您可以在此处阅读有关此技术的更多信息。

少数几个支持表单上传的jQuery插件是
1. jQuery表单
2. jQuery-File-Upload

在许多问答网站中都有很多关于此的问题答案,比如这个

此处讨论了使用 FormData的另一种使用 html 5 的解决方案。

于 2013-02-27T08:39:28.780 回答
0

您必须通过 IFrame 执行此操作

所以你创建了一个隐藏的 iframe

<iframe id="upload_target" name="upload_target" style="display: none;" src="#"></iframe>
<!-- note the src="#" -->

然后你创建一个带有一些按钮和你希望拥有的所有字段的表单

<form action="path/to/uploadscript.php" method="POST" enctype="multipart/form-data" target="upload_target">
<!--target will tell the browser to run it in the iFrame with name="upload_target" -->

然后在 uploadscript.php 中,您可以使用所有表单值,就好像它们是常规 $_POST 值一样:

<?php upload_file($_FILES['file'], $_POST['name'], $_POST['whatever']); ?>

这几乎与使用 AJAX 的感觉相同。

于 2013-02-27T08:45:56.210 回答