如何使用大参数执行ajax请求?

时间:2015-08-12 16:29:16

标签: javascript ruby-on-rails webrick

当我尝试从具有大json参数的javascript调用rails控制器函数时,我收到'Request-URI Too Large'错误。我正在使用Webrick http服务器。有没有办法在不更改服务器的情况下解决这个问题?

我有类似的东西:

$.ajax({
    url: 'application/get_list',
    data: { options : options_json, selected_option : selected_option_string},
    success: function(data) {
    // Insert the data to a div (returned data is a select tag with options)
    },
    type: 'get'
});

1 个答案:

答案 0 :(得分:1)

最简单的解决方法是将其更改为POST请求,并设置处理该操作的操作,然后您不会遇到此错误。

如果您需要GET请求,可以使用以下内容将名为webrick.rb的文件添加到config\initializers目录:

if defined?(WEBrick::HTTPRequest)
    WEBrick::HTTPRequest.const_set("MAX_URI_LENGTH", 10240)
end

如果您不断收到错误,请继续增加号码10240,直至其生效。

由于您的评论表明它必须是GET请求,因此除了设置MAX_URI_LENGTH之外别无选择。来自WEBrick source

if @request_line.bytesize >= MAX_URI_LENGTH and @request_line[-1, 1] != LF
    raise HTTPStatus::RequestURITooLarge
end

如果您需要非常长的URI,请将其设置为荒谬的内容,例如9223372036854775807