Dima8249
@Dima8249
Очень кратко - работаю над своим сайтом...

Не передаются get аргументы (параметры) с помощью ajax запроса, в чём проблема?

Я уже более 2 часов пытаюсь решить проблему с передачей только 1 аргумента при запросе. Метод: POST, я создаю пост функцией, загружая файлы к нему. Для передачи параметров (вроде описания) использую get, так как data должна принять только файлы. Вот код:
window.addPost = 0, window.fdPost = new FormData;

$(document).ready(function() {
    $("#files").change(function() {
        window.fdPost = new FormData;//для удаления предыдущих изменений файлов
        
        //save files
        $.each(this.files, function(d, g) {
            window.fdPost.append(d, g)
        })
    });
});

function createPost() {
    if (window.addPost == 0) {
        name = $('#name').val(), desc = $('#desc').val(), cat = $('#cat :selected').val();
        if (name.length && desc.length && cat.length) {
            $.ajax({
                url: "/posts/add/addPost?name=" + name + "&content=" + desc +"&cat=" + cat + "",
                method: 'POST',
                data: window.fdPost,
                cache: !1,
                dataType: 'text',
                processData: !1,
                contentType: !1,
                timeout: 60000,
                xhr: function() {
                    var s = $.ajaxSettings.xhr();
                    mdtoast('Загрузка материалов: 0%', {duration: 60000, type: 'info'})
                    return s.upload.addEventListener('progress', function(g) {
                        if (g.lengthComputable) {
                            var h = Math.ceil(100 * (g.loaded / g.total));
                            $('.mdt-message').text('Загрузка материалов: ' + h + '%');
                            if(h == 100) mdtoast('Материалы загружены, сохранение их на сервере', {duration: 40000,type: 'info'})
                        }
                    }, !1), s
                },
                success: function(s) {
                    s = $.parseJSON(s);
                    if ('success' == s.status) {
                        1 == s.upload ? (mdtoast('Пост создан и материалы прикреплены, ожидайте модерацию. Всего загружено ' + s.info.count + ' файлов, общий размер составляет ' + s.info.size, {interaction: true, type: 'info', actionText: 'OK', action: function() {
                            location.href = '/';
                            this.hide();
                        }})) : (mdtoast('Пост создан, ожидайте модерацию', {interaction: true, type: 'info', actionText: 'OK', action: function() {
                            location.href = '/';
                            this.hide();
                        }}))
                    } else {
                        window.addPost = 0;
                        mdtoast(s.message, {interaction: true, type: 'info', actionText: 'OK'})
                    }
                },
                error: function(s) {
                    window.addPost = 0;
                    mdtoast(lang.network_error_header + lang.network_error_text, {duration: 20000, type: 'error'})
                }
            });
        } else window.addPost = 0, mdtoast(lang.input_empty_header + lang.input_empty_text, {interaction: true, type: 'info', actionText: 'OK'})
    } else alert('В процессе публикации поста, новый пока опубликовать нельзя, ожидайте публикацию текущего...')
}


Проблем при выборе файлов нет, то есть если я выбрал файлы, то все параметры (и сами файлы, и имя поста, описание и категория) передаются, НО если я не выбрал файл(ы), то передаётся в get только name (имя поста). бред какой-то, решите
  • Вопрос задан
  • 299 просмотров
Решения вопроса 1
Dima8249
@Dima8249 Автор вопроса
Очень кратко - работаю над своим сайтом...
Решение:
window.fdPost.append("name", name)
window.fdPost.append("content", desc)
window.fdPost.append("cat", cat)

вставить перед отправкой запроса, где-то после if (name.length && desc.length && cat.length) {
и убрать из url хлам. Всё будет работать! php получит в $_POST данные name, content и cat, а $_FILES загруженные файлы)

Без никакой формы, просто из onClick="createPost()" публикация поста с инфой и файлами

Всем спасибо, решил написать ответ только сейчас... Решил проблему уже давно, может, кто-то будет долго искать ответ... А он тут :)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@ivandao
Ладно, все херня.
Параметры запроса передаются в URL только при GET запросе, а при POSTе - нет.
Если нужно передать параметры можно попробовать сделать так

data = {
     "name " : name ,
     "desc " : desc ,
     "cat"   : cat,
     "data"  : window.fdPost
}

И data сунуть в ajax
Ответ написан
@Kirill-Gorelov
С ума с IT
Я бы вообще все свои параметры запехнул вот так(пример)
data: {
                action: 'genkey',
                email: $('#input-5').val(),
                id: $('#api_key_id').val(),
                },


И url оставил только адрес.
Можешь посмотреть у меня а gist кучу примеров по ajax github начинай с 37 строки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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