Как я могу отправить изображение вместе с другими переменными JavaScript с помощью Ajax от JSON до PHP и получить.? [Дубликат]

Проверьте это

http://cs.boisestate.edu/~amit/teaching/handouts/cs-unix/node130.html

##########################################################
\#!/bin/sh

\# sed/changeword

prog=`basename $0`

case $# in
0|1) echo 'Usage:' $prog ' '; exit 1;;
esac

old=$1
new=$2
for f in *
do
        if test "$f" != "$prog"

        then
            if test -f "$f"
            then
                sed "s/$old/$new/g" $f > $f.new
                mv $f $f.orig
                mv $f.new $f
                echo $f done
            fi
        fi
done

##############################################################

306
задан mikemaccana 2 February 2015 в 18:15
поделиться

6 ответов

У меня была проблема с неправильным идентификатором jQuery.

Вы можете загружать данные и файлы с помощью одной формы с помощью ajax.

PHP + HTML

<?php

print_r($_POST);
print_r($_FILES);
?>

<form id="data" method="post" enctype="multipart/form-data">
    <input type="text" name="first" value="Bob" />
    <input type="text" name="middle" value="James" />
    <input type="text" name="last" value="Smith" />
    <input name="image" type="file" />
    <button>Submit</button>
</form>

jQuery + Ajax

$("form#data").submit(function(e) {
    e.preventDefault();    
    var formData = new FormData(this);

    $.ajax({
        url: window.location.pathname,
        type: 'POST',
        data: formData,
        success: function (data) {
            alert(data)
        },
        cache: false,
        contentType: false,
        processData: false
    });
});

Короткая версия

$("form#data").submit(function(e) {
    e.preventDefault();
    var formData = new FormData(this);    

    $.post($(this).attr("action"), formData, function(data) {
        alert(data);
    });
});
371
ответ дан Dan 17 August 2018 в 09:49
поделиться
  • 1
    в версиях IE & lt; 10 это решение не будет работать, поскольку FormData - это объект HTML5, не присутствующий в IE 8 или 9. – Xavier Guzman 18 September 2013 в 18:14
  • 2
    $(this)[0] является просто псевдонимом this, поэтому new FormData(this) должно быть достаточным. – r3wt 12 December 2014 в 08:05
  • 3
    По-видимому, невозможно проверить объект FormData, см. этот вопрос (для тех, кто работает в той же бессвязности, что и я, потому что объект всегда был пустым). – mvuajua 12 December 2014 в 15:02
  • 4
    Для будущих читателей важны объявления contentType и processData. См. этот ответ для получения дополнительной информации. – AaronSieb 6 July 2015 в 19:49
  • 5
    async: false не кажется необходимым для этого работать и блокирует мобильные (однопоточные) браузеры – Jeremy Daalder 21 October 2016 в 00:05

У меня была такая же проблема в ASP.Net MVC с HttpPostedFilebase, и вместо использования формы в Submit мне нужно было использовать кнопку на клике, где мне нужно было что-то делать, а затем, если все ОК, отправьте форму, вот как я

$(".submitbtn").on("click", function(e) {

    var form = $("#Form");

    // you can't pass Jquery form it has to be javascript form object
    var formData = new FormData(form[0]);

    //if you only need to upload files then 
    //Grab the File upload control and append each file manually to FormData
    //var files = form.find("#fileupload")[0].files;

    //$.each(files, function() {
    //  var file = $(this);
    //  formData.append(file[0].name, file[0]);
    //});

    if ($(form).valid()) {
        $.ajax({
            type: "POST",
            url: $(form).prop("action"),
            //dataType: 'json', //not sure but works for me without this
            data: formData,
            contentType: false, //this is requireded please see answers above
            processData: false, //this is requireded please see answers above
            //cache: false, //not sure but works for me without this
            error   : ErrorHandler,
            success : successHandler
        });
    }
});

это будет, чем правильно заполнить вашу модель MVC, пожалуйста, убедитесь, что в вашей модели свойство для HttpPostedFileBase [] имеет то же имя, что и имя элемента управления ввода в html, т. е.

<input id="fileupload" type="file" name="UploadedFiles" multiple>

public class MyViewModel
{
    public HttpPostedFileBase[] UploadedFiles { get; set; }
}
1
ответ дан h_power11 17 August 2018 в 09:49
поделиться

Для меня следующая работа с кодом

  $(function () {
    debugger;
    document.getElementById("FormId").addEventListener("submit", function (e) {
        debugger;
        if (ValidDateFrom()) { // Check Validation 
            var form = e.target;
            if (form.getAttribute("enctype") === "multipart/form-data") {
                debugger;
                if (form.dataset.ajax) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    var xhr = new XMLHttpRequest();
                    xhr.open(form.method, form.action);
                    xhr.onreadystatechange = function (result) {
                        debugger;
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            debugger;
                            var responseData = JSON.parse(xhr.responseText);
                            SuccessMethod(responseData); // Redirect to your Success method 
                        }
                    };
                    xhr.send(new FormData(form));
                }
            }
        }
    }, true);
});

В вашем методе отправки сообщения передайте параметр как HttpPostedFileBase UploadFile и убедитесь, что ваш входной файл совпадает с указанным в вашем параметре метода действий. Он также должен работать с формой AJAX Begin.

Запомните здесь, что ваша форма AJAX BEGIN не будет работать здесь, поскольку вы делаете свой пост-вызов определенным в коде, упомянутом выше, и вы можете ссылаться на свой метод в коде в соответствии с требованиями

Я знаю, что я отвечаю поздно, но это то, что сработало для меня

1
ответ дан Pranav Kulshrestha 17 August 2018 в 09:49
поделиться

другой вариант - использовать iframe и установить для него цель формы.

вы можете попробовать это (он использует jQuery):

function ajax_form($form, on_complete)
{
    var iframe;

    if (!$form.attr('target'))
    {
        //create a unique iframe for the form
        iframe = $("<iframe></iframe>").attr('name', 'ajax_form_' + Math.floor(Math.random() * 999999)).hide().appendTo($('body'));
        $form.attr('target', iframe.attr('name'));
    }

    if (on_complete)
    {
        iframe = iframe || $('iframe[name="' + $form.attr('target') + '"]');
        iframe.load(function ()
        {
            //get the server response
            var response = iframe.contents().find('body').text();
            on_complete(response);
        });
    }
}

он хорошо работает со всеми браузерам, вам не нужно сериализовать или подготовить данные. одна из сторон заключается в том, что вы не можете контролировать ход.

также, по крайней мере, для хрома, запрос не будет отображаться на вкладке «xhr» инструментов разработчика, но в разделе «doc»

26
ответ дан Roey 17 August 2018 в 09:49
поделиться
  • 1
    Хотя это работает, это NOT Ajax! – Henrique Barcelos 22 July 2016 в 17:00
  • 2
    Действительно, это не Аякс, но может быть полезен людям с тем же вопросом. – Roey 24 July 2016 в 06:00
  • 3
    Я просто не могу поверить, почему этот ответ получил -2, я в конечном итоге использовал это, поскольку мне нужен старый браузер. – Sijav 28 July 2016 в 18:36

Или короче:

$("form#data").submit(function() {
    var formData = new FormData($(this)[0]);
    $.post($(this).attr("action"), formData, function() {
        // success    
    });
    return false;
});
13
ответ дан schaenk 17 August 2018 в 09:49
поделиться
  • 1
    поэтому с этим, как вы проверяете поле данных с использованием того же сценария, то есть, если у вас есть текстовое поле и поле файла в вашей форме – George 2 September 2014 в 18:03
  • 2
    снова это не работает в IE & lt; 10 – KyorCode 12 September 2014 в 13:12
0
ответ дан Shailesh Dwivedi 29 October 2018 в 14:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: