ОБНОВЛЕНИЕ . Я почти решил эту проблему, см. Форма Jquery не отправляется в IE7 и IE8 Мне просто нужно отсортировать от 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:

<?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 это невозможно, поэтому нашел ЭТОТ плагин, который действительно работает, и сейчас я просто пытаюсь объединить его с моей первоначальной формой

11
Dawid van der Hoven 28 Янв 2013 в 14:40

5 ответов

Лучший ответ

Решил проблему ..

Это было так же просто, как добавить 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
Dawid van der Hoven 4 Фев 2013 в 11:50

Что нужно для получения полного локального пути к файлу. Для обработки загруженных файлов вам не нужно знать полный путь к файлу. Браузер сам выполняет эту работу.

Пожалуйста, посмотрите здесь, вы обязательно получите эту ссылку

2
Community 23 Май 2017 в 12:25

Я не знаю, подходит ли это вам или нет, но я использовал загрузчик файлов Andrew Valums для достижения того же результата.

Он может загружать несколько файлов, даже с поддержкой перетаскивания, но его чистый javascript не jQuery, но с другой стороны, Ray Nicholus разветвил код Valums в плагин jQuery.

Мой опыт работы с версией Valums, и она работает без проблем с jQuery. Единственная проблема заключается в том, что вы должны взаимодействовать с ним в базовом стиле javascript.

Моя реализация загрузки выглядит так:

  1. предоставить интерфейс для загрузки файлов на сервер
  2. сделать загрузчик файлов для загрузки в определенную папку на сервере и вернуть имя и путь к файлу на сервере (обычно «папка загрузки» / «имя файла»), чтобы вы могли сохранить его в скрытом элементе формы
  3. когда пользователь сохраняет свои данные, только сохранить путь к файлу (полученный из шага 2) в базе данных

Примечание: при этом вам не нужно дублировать какую-либо форму ввода для загрузки файла, так как вы можете загрузить столько файлов, сколько захотите, если ваш сервер может с этим справиться;)

https://github.com/valums/file-uploader

4
am05mhz 2 Фев 2013 в 05:00

Я не знаю про 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))
 {
 }
2
Amol 30 Янв 2013 в 13:26

Так что, если я правильно понимаю, вы хотите прикрепить некоторые пользовательские данные для загрузки файла. Это правильно?

Поэтому, если вы не хотите изменять используемый плагин jQuery, я бы добавил некоторые скрытые поля в форму и поместил эти пользовательские данные в них непосредственно перед отправкой. Затем плагин должен забрать их и отправить вместе с файлами.

3
Josef Kufner 30 Янв 2013 в 12:52