我正在尝试上传以表格形式发送的文件。我正在尝试使用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正在这样做。无论如何,感谢大家的回答!
您不能使用纯Ajax / jQuery来做到这一点,但是可以与主要浏览器的所有最新版本都支持的JavaScript FormData对象结合使用。
可以在这里找到一个非常简单的jQuery示例:https : //coderwall.com/p/p-n7eq
可以在以下位置找到更详细但纯净的JavaScript:https : //developer.mozilla.org/zh- CN/docs/Web/Guide/Using_FormData_Objects?redirectlocale=en- US&redirectslug=Web%2FAPI%2FFormData%2FUsing_FormData_Objects