2

我正在尝试上传以表格形式发送的文件。我正在尝试使用 php,但在 html 和 php 之间我使用 JS 和 Jquery 和 ajax(因为我不希望页面重新加载)。我遇到了 $_FILES 的问题。

就是这样,我正在使用带有 javascript 操作 (action="javascript: SendPresupMail();") 的表单(包含文件输入)。

在那个 JS 函数中,我使用了一点 Jquery 和 ajax,在其中,有一个对 php 函数的调用。

问题是在那个 php 函数中 $_FILES 是空的,我需要上传表单中的文件发送。

这是代码:

HTML 表单,调用 JS:

<form action="javascript: sendPresupMail();" method="post" id="formId" enctype="multipart/form-data">
<input type="text" id="mail" name="mail" />
<input type="file" id="file_selected" name="file_selected" />
<input type="submit" value="Submit" />

JS 函数,并使用 AJAX 和 JQUERY 调用 PHP:

function sendPresupMail() {
$.ajax({
    url: 'remote.php',
    type: 'post',
    data: {
    'w': 'sendPresupMail',
    'mail': document.getElementById('mail').value
    },
    success: function(data) {
        if(data != "ok" && data != ""){alert(data);}
        if(data == "ok"){alert("mail send.");}
    }
});

}

最后,PHP代码:

private function sendPresupMail(){
    $filename = ($_FILES['file_selected']['name']);
            ...
            ...
}

那里的代码无关紧要,问题是 $filename 没有收到任何东西,因为 $_FILES 它是空的(我用 var_dump 检查它,它是空的)。所以我不能上传文件,我该怎么办?

解决了

这是解决方案:实际上它比我想象的要简单得多。首先,我创建了一个 iframe,所以现在所有的表单、javascript、ajax 等都在 iframe 中进行。所以看起来页面没有刷新,因为 iframe 正在这样做。无论如何,谢谢大家的回答!

4

3 回答 3

2

使用纯 Ajax/jQuery 无法做到这一点,但可以结合主流浏览器的所有最新版本支持的 JavaScript FormData 对象来做到这一点。

可以在这里找到一个非常简单的 jQuery 示例:https ://coderwall.com/p/p-n7eq

可以在这里找到更详细但更纯的 JavaScript:https ://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects?redirectlocale=en-US&redirectslug=Web%2FAPI%2FFormData%2FUsing_FormData_Objects

于 2013-09-09T21:05:48.173 回答
1

$_POST您发布到的页面上的变量由您在调用data中提交的变量填充。$.ajax该数据没有文件输入,我不确定它是否可以。看看周围一些方便的插件。

这建议使用 jQuery Form Plugin:jQuery AJAX post with fileupload

我以前亲自使用过 Uploadify:http ://www.uploadify.com/

或手动执行: http: //net.tutsplus.com/tutorials/javascript-ajax/uploading-files-with-ajax/

于 2013-09-09T21:03:49.673 回答
0

检查 $_POST 是否也为空。当上传的文件超过upload_max_filesizepost_max_size

于 2013-09-09T20:58:56.903 回答