Загрузите изображение с помощью jquery ajax с дублирующимся вводом
ОБНОВЛЕНИЕ: Я почти решил эту проблему, см. форму Jquery без отправки в IE7 и IE8 Мне просто нужно отсортировать ot ie7 и ie8,
Я использовал ЭТОТ плагин для загрузки файлов в качестве вложения электронной почты, я дошел до того, что он действительно работает, единственная проблема в том, что он в настоящее время использует его для отправки:
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 send:
<?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 = "[email protected]";
$strSubject = "Image Testing";
$strMessage = nl2br($msg);
//*** Uniqid Session ***//
$strSid = md5(uniqid(time()));
$strHeader = "";
$strHeader .= "From: Dawid<[email protected]>\nReply-To:[email protected]";
$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, поэтому я нашел ЭТОТ плагин, который действительно работает, и сейчас я просто пытаюсь объединить его с моей первоначальной формой
Ответы
Ответ 1
решил проблему..
Это было так же просто, как добавление 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");
}
});
})();
}
решила проблему отправки, спасибо за помощь всем.
Ответ 2
Я не знаю, подходит ли это для ваших нужд или нет, но я использовал файл-загрузчик Andrew Valums для достижения того же результата.
Он может загружать несколько файлов, даже поддерживает перетаскивание, но его чистый javascript не jQuery, но, с другой стороны, Ray Nicholus разветкил код Valums плагину jQuery.
Мой опыт с версией Valums, и он работает бок о бок с jQuery без проблем. Единственная проблема заключается в том, что вам нужно взаимодействовать с ним в основном стиле javascript.
Моя реализация загрузки выглядит следующим образом:
- предоставляет интерфейс для загрузки файлов на сервер
- сделать загрузчик файлов для загрузки в определенную папку на сервере и
вернуть имя и путь к файлу на сервере (обычно "загружать"
folder "/" имя файла "), чтобы вы могли сохранить это в скрытом элементе для
форма
- когда пользователь сохраняет свои данные, сохраняйте только путь к файлу (полученный с шага 2) в базу данных
Примечание: при этом вам не нужно дублировать какую-либо входную форму для загрузки файла, так как вы можете загружать столько файлов, сколько хотите, если ваш сервер может обращаться с ним в любом случае;)
https://github.com/valums/file-uploader
Ответ 3
Итак, если я правильно понимаю, вы хотите прикрепить некоторые пользовательские данные к загрузке файлов. Правильно ли это?
Итак, если вы не хотите модифицировать плагин jQuery, который вы используете, я бы добавил некоторые скрытые поля в форму и помещал эти пользовательские данные в них непосредственно перед отправкой. Затем плагин должен забрать их и отправить вместе с файлами.
Ответ 4
в чем заключается необходимость получения полного пути к локальному файлу. Чтобы обрабатывать загруженные файлы, вам не нужно знать полный путь к файлу .Browser выполняет это задание самостоятельно.
пожалуйста, посмотрите здесь, вы наверняка воспользовались этой ссылкой.
Ответ 5
Я не знаю о 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))
{
}