【问题标题】:Sending files as strings in post request stops params being parsed在 post 请求中将文件作为字符串发送会停止解析参数
【发布时间】:2018-07-01 15:21:31
【问题描述】:

我创建了一个 grails 网络应用程序,用作会员登录,以便人们可以跟踪和更改他们的信息。

作为创建帐户时的一部分,文件从 ajax 请求发送到控制器。文件的字符串内容就是发送的内容。

在chrome中查看网络流量表明数据发送正确。

请求中发送了3个文件,每个文件都是同一个文件,发送方式相同。

问题是发送第三个文件时,到达控制器动作时参数没有解析到参数映射。它们可在 request.reader.text 获得。如果只发送了 2 个文件,那么它可以完美运行并且参数可用。

这确实可以工作,我已经恢复了我在 UrlMappings 中所做的更改,但仍然没有运气。

我也增加了 maxRequestSize 但我认为请求大小只有大约 18Kb 所以这应该不是问题。

另一件事是我为使用 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
        ]
    }

【问题讨论】:

  • 分而治之。您是否尝试将其拆分为几个请求?
  • @Michal_Szulc 谢谢,但我终于找到了解决方案!

标签: ajax rest grails


【解决方案1】:

阅读更多内容后,您不能总是依赖将信息解析为参数。它应该只用于 url 参数。

我决定尝试让它与 request.JSON 一起工作,因为这是从 post 请求的正文中检索信息的更好方法。

只是将 Content-Type 更改为 application/json 不起作用。我也不得不这样做

data: JSON.stringify({...})

在 ajax 请求中。这终于让它工作了!

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2011-06-30
    • 1970-01-01
    • 2019-10-27
    • 2016-11-19
    • 2016-08-02
    相关资源
    最近更新 更多