**更新:**大家好,我几乎已经解决了这个问题,请参阅Jquery form no submission to IE7 and IE8我只需要排序ie7和ie8,
我一直在使用 THIS 插件上传文件作为电子邮件附件,我已经达到实际可行的程度,唯一的问题是它目前使用它来提交:
jQuery.ajax({
beforeSend: function() {
status.empty();
var percentVal = '0%';
bar.css("width", percentVal)
percent.html(percentVal);
},
uploadProgress: function(event, position, total, percentComplete) {
var percentVal = percentComplete + '%';
bar.css("width", percentVal)
percent.html(percentVal);
//console.log(percentVal, position, total);
},
complete: function(xhr) {
status.html(xhr.responseText);
}
});
我需要将表单添加到其中,使用此提交:
jQuery.ajax({
type: "POST",
url: "mail.php",
dataType: "json",
data: {parameters: jsonData}
});
如何使用我的提交形式使插件正常工作?
以下是当前工作上传表单的 JSFIDDLE 。
然后我需要将工作单与 JSFIDDLE 结合起来(我已将其缩短为仅上传字段,但还有其他一些信息)
这里也是php发送功能:
<?php
function printMember($member) {
foreach($member as $key=>$value) {
//Fill the aux string first
$str.= "$key : $value <br />";
}
//string that will be added to $msg variable inside the loop
return $str;
}
$json = $_POST['parameters'];
$json_string = stripslashes($json);
$data = json_decode($json_string, true);
$depCount = count($data["dependants"]);
$msg .= "<h2>Main member data:</h2>";
$msg .= printMember($data["mainmember"]);
$msg .= "<h2>There are $depCount Dependants</h2>";
foreach ($data["dependants"] as $index => $dependant) {
$msg .= "<h2>Dependant $index</h2>";
$msg .= printMember($dependant);
}
$strTo = "dawid@jamfactory.co.za";
$strSubject = "Image Testing";
$strMessage = nl2br($msg);
//*** Uniqid Session ***//
$strSid = md5(uniqid(time()));
$strHeader = "";
$strHeader .= "From: Dawid<test@testme.co.za>\nReply-To:test@testme.co.za";
$strHeader .= "MIME-Version: 1.0\n";
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n";
$strHeader .= "This is a multi-part message in MIME format.\n";
$strHeader .= "--".$strSid."\n";
$strHeader .= "Content-type: text/html; charset=utf-8\n";
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n";
$strHeader .= $strMessage."\n\n";
//*** Attachment ***//
$count = 0;
foreach($_FILES['myfile']['name'] as $filename)
{
$temp = $_FILES['myfile']['tmp_name'][$count];
$strFilesName = $filename;
$strContent = chunk_split(base64_encode(file_get_contents($temp)));
$strHeader .= "--".$strSid."\n";
$strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n";
$strHeader .= "Content-Transfer-Encoding: base64\n";
$strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n";
$strHeader .= $strContent."\n\n";
$count++;
}
$flgSend = @mail($strTo,$strSubject,null,$strHeader); // @ = No Show Error //
if($flgSend)
{
echo "Mail send completed.";
}
else
{
echo "Cannot send mail.";
}
?>
任何帮助非常感谢。 :)
如果有人不完全理解这个问题,我会在此尝试进一步解释:
我有可复制的字段,提交时将信息放入JSON数组,然后通过PHP解析为电子邮件,我试图做的是有一个文件字段,图像上传并随电子邮件一起发送,但在网上研究了很多,我发现ajax是不可能的,所以我找到了实际有效的 THIS 插件,现在我只是想把它与我的原始形式结合起来
答案 0 :(得分:4)
我不知道这是否适合您的需要,但我使用了Andrew Valums文件上传器来达到相同的效果。
它可以上传多个文件,甚至有拖放支持,但它的纯javascript不是jQuery,但另一方面,Ray Nicholus已经将Valums代码分支到jQuery插件。
我的经验是Valums版本,它与jQuery并行工作没有问题。唯一的问题是你必须以基本的javascript风格与它进行交互。
我的上传实施方式如下:
注意:使用此功能,您无需复制任何输入表单进行文件上传,因为您可以根据需要上传任意数量的文件,只要您的服务器可以处理该文件;)
答案 1 :(得分:3)
因此,如果我理解正确,您需要将一些自定义数据附加到文件上传。这是对的吗?
因此,如果您不想修改正在使用的jQuery插件,我会在表单中添加一些隐藏字段,并在提交之前将自定义数据放入其中。然后插件应该将它们拾起并与文件一起发送。
答案 2 :(得分:3)
解决了这个问题..
就像将method="post" action="http://globalgeorgia.co.za/modules/mod_appform/js/mail.php"
和type="submit"
添加到提交函数一样简单,它在IE 7和IE 8中完美运行,然后也是这样:
if (isValid) {
getValues();
var jsonData = JSON.stringify(result);
(function() {
var bar = jQuery('.bar');
var percent = jQuery('.percent');
var status = jQuery('#status');
jQuery('#spinner').html('<img src="http://globalgeorgia.co.za/modules/mod_appform/js/ajax-loader.gif" />');
jQuery('#app_form').ajaxForm({
type: "POST",
url: "http://globalgeorgia.co.za/modules/mod_appform/js/mail.php",
dataType: "json",
//iframe: true,
data: {parameters: jsonData},
beforeSend: function() {
status.empty();
jQuery('#spinner').html();
var percentVal = '0%';
bar.css("width", percentVal)
percent.html(percentVal);
},
uploadProgress: function(event, position, total, percentComplete) {
var percentVal = percentComplete + '%';
bar.css("width", percentVal)
percent.html(percentVal);
},
complete: function(xhr) {
status.html(xhr.responseText);
jQuery('#spinner').html("sent");
}
});
})();
}
解决了发送问题,谢谢大家的帮助。
答案 3 :(得分:2)
获取完整本地文件路径的需求是什么。要处理上传的文件,您不需要知道完整的文件路径。浏览器可以独立完成这项工作。
请看这里,你肯定会受益于这个链接
答案 4 :(得分:2)
我不知道PHP只是添加以下内容来发布数据。将参数传递给您的表单
@{
AjaxOptions options = new AjaxOptions{
HttpMethod = "Post",
url: "mail.php",
dataType: "json",
data: {parameters: jsonData}
UpdateTargetId = "formContent",
beforeSend: function() {
status.empty();
var percentVal = '0%';
bar.css("width", percentVal)
percent.html(percentVal);
},
uploadProgress: function(event, position, total, percentComplete) {
var percentVal = percentComplete + '%';
bar.css("width", percentVal)
percent.html(percentVal);
//console.log(percentVal, position, total);
},
OnFailure = "do some thing",
OnBegin = "ShowProgressBar",
OnComplete = function(xhr) {
status.html(xhr.responseText);
}
};
}
你需要在PHP中添加代码(在 MVC3 asp .net中我们喜欢这样)
@using (Ajax.BeginForm(parameters))
{
}