Я создал веб-приложение grails, которое используется для входа в систему, чтобы люди могли отслеживать и изменять свою информацию.
Как часть этого при создании учетной записи, файлы отправляются на контроллер из запроса AJAX. Содержимое строки файла - это то, что отправлено.
Проверка сетевого трафика в Chrome показывает, что данные отправлены правильно.
В запросе отправлено 3 файла, каждый из которых является одним и тем же способом.
Проблема в том, что при отправке третьего файла параметры не анализируются в карте параметров при достижении действия контроллера. Они доступны на request.reader.text. Если отправлено только 2 файла, это работает отлично, и параметры доступны.
Это раньше работало, и я отменил изменения, которые я сделал в UrlMappings, но все еще не повезло.
Я также увеличил maxRequestSize, но я думаю, что размер запроса составляет всего около 18 КБ, так что это не должно быть проблемой.
Другое дело, что у меня есть функция редактирования для пользователя, использующего запрос PUT. Когда делаю то же самое там все отлично работает. Ajax-запросы одинаковы: один использует PUT, а другой POST.
Ниже приведен мой пост-запрос ajax и мой UrlMappings.groovy. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
var request = jQuery.ajax({
type: 'POST',
data: {
firstName: $("input[name='" + _selectors.firstNameSelector + "']").val(),
lastName: $("input[name='" + _selectors.lastNameSelector + "']").val(),
dob: $("input[name='" + _selectors.dobSelector + "']").val(),
email: $("input[name='" + _selectors.emailSelector + "']").val(),
mobile: $("input[name='" + _selectors.mobileSelector + "']").val(),
addressLine1: $("input[name='" + _selectors.addressLine1Selector + "']").val(),
addressLine2: $("input[name='" + _selectors.addressLine2Selector + "']").val(),
townCity: $("input[name='" + _selectors.townCitySelector + "']").val(),
postcode: $("input[name='" + _selectors.postcodeSelector + "']").val(),
emergencyName: $("input[name='" + _selectors.emergencyNameSelector + "']").val(),
emergencyNumber: $("input[name='" + _selectors.emergencyNumberSelector + "']").val(),
emergencyEmail: $("input[name='" + _selectors.emergencyEmailSelector + "']").val(),
emergencyRelationship: $("input[name='" + _selectors.emergencyRelationshipSelector + "']").val(),
emergencyAddressLine1: $("input[name='" + _selectors.emergencyAddressLine1Selector + "']").val(),
emergencyAddressLine2: $("input[name='" + _selectors.emergencyAddressLine2Selector + "']").val(),
emergencyTownCity: $("input[name='" + _selectors.emergencyTownCitySelector + "']").val(),
emergencyPostcode: $("input[name='" + _selectors.emergencyPostcodeSelector + "']").val(),
username: $("input[name='" + _selectors.usernameSelector + "']").val(),
role: $("#role option:selected").val(),
dateOfJoining: $("input[name='" + _selectors.dateOfJoiningSelector + "']").val(),
membershipFile: files[_selectors.membershipFileSelector],
privacyFile: files[_selectors.privacyFileSelector],
medicalHistories: _self.collectMedicalHistories(),
classes: _self.collectAttendedClasses(),
grades: _self.collectGrades(),
insurances: _self.collectInsurances()
},
url: _accountsUrl.addUser,
success: _self.resolveUserAddSuccessResponse,
error: _self.showUserAddErrors
});
UrlMappings.groovy
"/api/$controller/$action/$id" {
namespace = "api"
constraints {}
}
"/api/admin/$controller" {
namespace = "api"
action = [
GET : "get", // show - get one item by id
POST : "post", // create - by submitting full content
]
}
"/api/admin/$controller/$id" {
namespace = "api"
action = [
GET : "get", // show - get one item by id
PUT : "put", // update - by submitting full content
DELETE: "delete", // delete - delete one item by id
POST : "post", // create - by submitting full content
]
}