【问题标题】:Play! Framework retrieved a String and it's a null玩!框架检索到一个字符串,它是一个空值
【发布时间】:2016-04-08 05:30:41
【问题描述】:

播放框架版本2.2.6

jQuery

$('#fridgeSearchInputField').keyup(function () {

var $text = $(this).val();

    $.ajax({
        type: 'GET',
        url: '@routes.controllers.Application.ajaxAutocomplete()',
        data: $text,
        success: function (data) {
            // success result
        }

    });   
});

路线文件

GET     /:ingredientName            controllers.Application.ajaxAutocomplete(ingredientName: String)

应用程序控制器中的方法

public static Result ajaxAutocomplete(String ingredientName){
    String s = request().body().asText(); //I guess something here is wrong
    System.out.println(s); 
    return ok("");
}

问题是当我在游戏控制台中打印 s 变量时,它会打印出 null。我的代码有什么问题?以及如何通过请求从输入字段中获取文本以便以后使用?谢谢

【问题讨论】:

  • 在您的 Javascript 中,您生成的 URL @routes.controllers.Application.ajaxAutocomplete(),即没有任何成分名称。我最近没有做过任何 Play 框架,但你不应该提供一个论点吗?此外,您是否尝试过调试并查看 request().body() 它的外观?
  • @Gaël 当我写 request().toString() 它返回我想要的但像这样 GET /@routes.controllers.Application.ajaxAutocomplete()?d GET /@routes.controllers.Application.ajaxAutocomplete()?di 等等
  • 您正在发送一个获取请求;它甚至一个身体吗?像往常一样发送参数。不相关,但 IMO $ 前缀应该保留给实际上与 jQuery 相关的东西,而不是文本字符串。
  • 正如@DaveNewton 所说,GET 请求没有正文。当您将数据参数交给jQuery.ajax 时,它会将其作为查询字符串附加。但是,Play 不会将查询字符串视为正文。所以你看到的是预期的输出。
  • 看看这个post

标签: java ajax playframework playframework-2.2


【解决方案1】:

我找到了解决办法!

所以我稍微更改了我的文件,一切都按预期工作。可能这不是最好的算法,但它确实有效!

    final String request;
    String[] requestArray;
    try {

        request = request().toString();
        requestArray = request.split("\\?", 2);
        String userRequest = requestArray[1];
        System.out.println(userRequest);


        return ok();


    } catch (IndexOutOfBoundsException e) {
        e.printStackTrace(); 
    }


    return ok();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2019-05-11
    • 2021-04-24
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多