- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
基本上,我正在试验基于网络的模拟电子邮件客户端。为此,我创建了一个文本编辑器,当用户希望在他们的消息中的某个位置放置或附加图像时,他们按下一个按钮来创建一个新的文件输入。上传后,这会在他们的消息中显示图片。
当用户发送消息时,消息中的图像 src 标签从 filereader 模板切换到新的 src,文件输入的值正在提交,图像传输到根文件夹中某处的新目录网站。这工作得很好。图片是独一无二的,每封邮件都有一个文件夹,其中包含来自邮件本身的图片。
我现在遇到的问题是,当用户希望将他们的消息保存为草稿时,我需要执行相同的过程。但是,唯一的区别是没有提交表单,我只是使用 ajax 来触发表单上传。我遇到的问题是我似乎无法访问文件输入的上传状态。我无法提交表单,因为当我提交时我会发送消息,这意味着我必须省略 $(form).submit( function (){});
系统。
因此我的问题是:如何使用 ajax 提交一组文件输入?到目前为止,这是我的代码:
JS:
$('a[data-command="save-reply"]').click(function(){
messid = 1;
var draftbool2 = 4;
imgS = [];
$("#inbox-reply-body").find("img").each(function(){
if($(this).attr("data-sub-src")){
var imgO = $(this).attr("data-sub-src");
var imgN = imgO.replace("postid", messid);
$(this).attr("src", imgN);
$(this).removeAttr("data-sub-src");
}
});
$(".image-list-reply").find("input[type='file']").each(function(){
imgS.push($(this));
});
alert(imgS);
var imgArray = JSON.stringify(imgS);
alert(imgArray);
var prevMessage = $('#message-body').html();
var content = $('#inbox-reply-body').html();
var body = content + "<hr><div id=\"reply-message\">" + prevMessage + "</div>";
//formdata submitting id, draftbool, and body
var fd2 = new FormData();
fd2.append('body', body);
fd2.append('draftbool', draftbool2);
fd2.append('idmessage', messid);
fd2.append('image', imgArray);
$.ajax({
type: 'POST',
url: "server/saveDraft.php",
data: fd2,
contentType: false,
processData: false,
success: function(done){
alert(done);
}
});
});
PHP
$images = json_decode($_POST['image']);
foreach($images as $l){
var_dump(implode(",", $images));
foreach($l as $f => $name){
$movedir = ("../resources/img/inbox/".$idofdraft."/");
$dir = ("resources/img/inbox/".$idofdraft."/");
$allowedExts = array("gif", "jpeg", "jpg", "png", "PNG", "JPG", "JPEG", "GIF");
$temp = explode(".", $name);
$extension = end($temp);
//Set file type and size
if ((($_FILES['image-reply']['type'] == "image/gif") || ($_FILES['image-reply']['type'] == "image/GIF")
|| ($_FILES['image-reply']['type'] == "image/jpeg") || ($_FILES['image-reply']['type'] == "image/JPEG")
|| ($_FILES['image-reply']['type'] == "image/jpg") || ($_FILES['image-reply']['type'] == "image/JPG")
|| ($_FILES['image-reply']['type'] == "image/png") || ($_FILES['image-reply']['type'] == "image/PNG"))
&& ($_FILES['image-reply']['size'] < 1073741824)
&& in_array($extension, $allowedExts)){
if($_FILES['image-reply']['error'][$f] > 0){
echo "Return Code: ".$_FILES['image-reply']['error'][$f]."<br />";
} else {
if(file_exists($movedir)){
echo " Directory Exists";
} else {
mkdir($movedir, 0777, true);
}
if(file_exists($movedir.$name)){
echo " File already exists";
$pathname = $dir.$name;
} else {
$names = $_FILES['image-reply']['tmp_name'];
if(move_uploaded_file($names, "$movedir/$name")){
$pathname = ($dir."/".$name);
echo " File has been uploaded";
}
}
}
}
}
}
HTML(在完整的 PHP 文件中回显,因此是\")
<form id=\"inbox-reply\" method=\"post\" action=\"server/replyMessage.php\" enctype=\"multipart/form-data\">
<a href=\"#\" data-command=\"insertImage\"><i class=\"fa fa-image\"></i></a>
<input type=\"file\" id=\"image-upload\" name=\"image\"/>
<a href=\"#\" data-command=\"insertattach\"><i class=\"fa fa-paperclip\"></i></a>
<input type=\"file\" id=\"file-upload\" name=\"file\"/>
<a href=\"#\" data-command=\"save-reply\"><i class=\"fa fa-floppy-o\"></i></a>
</div>
<div id=\"inbox-reply-body\" class=\"reply-content\" contenteditable>
</div>
<div class=\"image-list-reply\">
</div>
<div class=\"attach-list-reply\">
</div>
<input type=\"submit\" name=\"reply\" value=\"Send\">
</form>
通常我会将 foreach($l as $f => $name)
替换为 foreach($_POST['image-reply'] as $f => $name)
这会起作用,但在这里我应该通过 ajax 提交 $_POST['image-reply'],这迫使我将所有文件输入放在一个数组中。我的问题是从数组中获取它们作为可用的 php 元素。谁能帮帮我?
PS 抱歉我不够清晰,我不确定如何解决社区问题,更不用说这个问题了!简而言之,如何从通过 ajax 提交的文件输入数组中获取可用的文件输入数据?
最佳答案
您不能对 DOM 数组进行字符串化。
这是你必须做的:
var fd2 = new FormData();
$(".image-list-reply").find("input[type='file']").each(function(){
$.each(this.files, function(i, file){
fd2.append('image', file)
})
});
此外,我仍然建议您使用 $(form).submit( function (){});
您可以从中获得良好的 html5 验证,但另外还需要执行 event .preventDefault()
关于javascript - 提交文件输入数组而不提交表单本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41249414/
我正在尝试创建一个包含 int[][] 项的数组 即 int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
我有一个整数数组: private int array[]; 如果我还有一个名为 add 的方法,那么以下有什么区别: public void add(int value) { array[va
当您尝试在 JavaScript 中将一个数组添加到另一个数组时,它会将其转换为一个字符串。通常,当以另一种语言执行此操作时,列表会合并。 JavaScript [1, 2] + [3, 4] = "
根据我正在阅读的教程,如果您想创建一个包含 5 列和 3 行的表格来表示这样的数据... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...它说你可以使用下
我通常使用 python 编写脚本/程序,但最近开始使用 JavaScript 进行编程,并且在使用数组时遇到了一些问题。 在 python 中,当我创建一个数组并使用 for x in y 时,我得
我有一个这样的数组: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // 我想使用 toStr
rent_property (table name) id fullName propertyName 1 A House Name1 2 B
这个问题在这里已经有了答案: 关闭13年前。 Possible Duplicate: In C arrays why is this true? a[5] == 5[a] array[index] 和
使用 Excel 2013。经过多年的寻找和适应,我的第一篇文章。 我正在尝试将当前 App 用户(即“John Smith”)与他的电子邮件地址“jsmith@work.com”进行匹配。 使用两个
当仅在一个边距上操作时,apply 似乎不会重新组装 3D 数组。考虑: arr 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。 最佳答案 这是一个不太理
我有一个包含 GPS 坐标的 MySQL 数据库。这是我检索坐标的部分 PHP 代码; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
我需要找到一种方法来执行这个操作,我有一个形状数组 [批量大小, 150, 1] 代表 batch_size 整数序列,每个序列有 150 个元素长,但在每个序列中都有很多添加的零,以使所有序列具有相
我必须通过 url 中的 json 获取文本。 层次结构如下: 对象>数组>对象>数组>对象。 我想用这段代码获取文本。但是我收到错误 :org.json.JSONException: No valu
enter code here- (void)viewDidLoad { NSMutableArray *imageViewArray= [[NSMutableArray alloc] init];
知道如何对二维字符串数组执行修剪操作,例如使用 Java 流 API 进行 3x3 并将其收集回相同维度的 3x3 数组? 重点是避免使用显式的 for 循环。 当前的解决方案只是简单地执行一个 fo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有来自 ASP.NET Web 服务的以下 XML 输出: 1710 1711 1712 1713
如果我有一个对象todo作为您状态的一部分,并且该对象包含数组列表,则列表内部有对象,在这些对象内部还有另一个数组listItems。如何更新数组 listItems 中 id 为“poi098”的对
我想将最大长度为 8 的 bool 数组打包成一个字节,通过网络发送它,然后将其解压回 bool 数组。已经在这里尝试了一些解决方案,但没有用。我正在使用单声道。 我制作了 BitArray,然后尝试
我们的数据库中有这个字段指示一周中的每一天的真/假标志,如下所示:'1111110' 我需要将此值转换为 boolean 数组。 为此,我编写了以下代码: char[] freqs = weekday
我是一名优秀的程序员,十分优秀!