1

我想用 JQuery 向具有字符串 arg 的应用程序方法发出请求,但是我在传递字符串的值时遇到问题。在我的 HTML 中,我有这个脚本:

<script>
var search;
$("#search").keyup(function () {
    if($(this).val() != search){
        search = $(this).val();
        //alert(search);
        $.get("@routes.Application.autocomplete("+search+")", function (data) {
            //some stuff will be done here   
        });
        return false;
    }
}).keyup();

我的申请方法是这样的:

public static Result autocomplete(String search) {
    System.out.println("Searching for: "+search);
    final List<String> response = new ArrayList<String>();
    response.add("test1");
    response.add("test2");
    return ok(Json.toJson(response));

}

发生的情况是 JQuery 没有发送search var 的值,而是发送了一个字符串"search"

如何在 JQuery Get() 中连接字符串?

谢谢

4

2 回答 2

1

不能将服务器端变量(即。@routes.C.a(somevar))与典型的客户端元素混合,这很明显!不是吗?

  1. 使用一些检查器工具来检查渲染的 HTML,你就会明白
  2. 检查 jQuery 文档,如何使用 ajax 请求传递参数
  3. 更加熟悉路由和在框架视图中使用 JS

提示:

  1. 在路由中设置一个search参数作为可选参数

    GET /autocomplete  controllers.Application.autocomplete(search: String ?= "")
    
  2. 使用“几乎正常”的方式构建 AJAX 查询:

    // cut...
    $.get("@routes.Application.autocomplete()",
         { search: search },
         function (data) {
            //some stuff ...
         }
    );
    // cut...
    
  3. 如果不是,则验证传入的值,empty或者在这种情况下null返回badRequest()(可能以 JSON 格式)。

于 2013-05-18T22:10:45.880 回答
1

也许您可以使用反向路由并以这种方式进行 ajax 调用:

Javascript代码:

var ajaxProps = jsRoutes.controllers.Application.subscribe(self.emailSuscriber());
$.ajax({
 type: ajaxProps.method,
 url: ajaxProps.url,
}).done(function( msg ) {
   self.alertMessage(msg);
});

Java服务器代码:controller.Aplication

public static Result subscribe(String email){
/* suscribe code */
}

public static Result javascriptRoutes() {
    response().setContentType("text/javascript");
    return ok(
        Routes.javascriptRouter("jsRoutes",
                controllers.routes.javascript.Application.suscribe()));
 }

路由文件

  GET  /subscribe/:email               controllers.Application.subscribe(email:String)

  GET  /public/javascripts/routes      controllers.Application.javascriptRoutes()

在您的 HTML 模板中包括:

   <script src="@routes.Application.javascriptRoutes"> type="text/javascript"</script>
于 2013-05-18T22:55:49.703 回答