2015-08-25 3 views
1

Я использую тонкий PHP Framework и пытается отправить FormData с помощью Jquery.ajax() следующим образом:Jquery.ajax PUT данных не разобранные на PHP

var data = new FormData(); 
data.append('some_name', 'some_data'); 
data.append('a_file', $('input[name=the_file_form_field]').get(0).files[0])); 

$.ajax({ 
    url: 'the_destination_url', 
    data: data, 
    processData: false, 
    contentType: false, 
    type: 'PUT', 
    dataType: 'json', 

    success: function(data, textStatus, jqXHR) { 
     //Processing result here 
    }, 

    error: function(jqXHR, textStatus, errorThrown) { 
     //Processing result here 
    } 
}); 

Однако я попытался следующие сценарии :

  • работа: FormData без файла, добавляющее _method = PUT и настройка $ .ajax к типу: POST
  • не работает (PHP не получает никаких данных PUT) : FormData без файла, установив $ .ajax набрать: PUT
  • Не работает (метод остается POST): FormData с файлом, добавив _method = ставить и настройка $ .ajax печатать: POST
  • не работает (PHP не получает никаких данных PUT): FormData с файлом, установив $ .ajax набрать: PUT

я что-нибудь не хватает?

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

+1

Пожалуйста, укажите 'не работает'. Правильно ли отвечает сервер? или ajax не получает правильный ответ? –

+0

Сервер не получает (или анализирует) данные PUT правильно, тело запроса в консоли хром ясно показывает, что оно сгенерировано правильно, хотя – xorinzor

+0

И как именно мы теперь можем помочь вам решить вашу проблему, если сервер получает действительный PUT -request, но, вероятно, работает неправильно? Я думаю, что каждый из нас хочет быть провидцем, но мы этого не делаем. –

ответ

1

я решил его с помощью комментариев от людей, размещения в: https://bugs.php.net/bug.php?id=26004

Видимо PHP молча отбрасывает все входящие данные POST всякий раз, когда post_max_size директивы превышено.

Помимо post_max_size, это также удобно проверять директиву upload_max_filesize.

1

Просто попробуйте отправить данные как объект. , например.

data: {'formData' : data}, 

Ваш запрос Ajax должен выглядеть

$.ajax({ 
    url: 'the_destination_url', 
    data: {'formData' : data}, 
    processData: false, 
    contentType: false, 
    type: 'PUT', 
    dataType: 'json', 

    success: function(data, textStatus, jqXHR) { 
     //Processing result here 
    }, 

    error: function(jqXHR, textStatus, errorThrown) { 
     //Processing result here 
    } 
}); 
+0

Это не работает, так как тело запроса приведет к [Объекту объекта], это будет работать, когда тип запроса был GET или POST – xorinzor

Смежные вопросы