无法通过ajax将String传递给控制器

时间:2017-03-09 14:31:03

标签: javascript ajax playframework

我是使用play框架和ajax进行web开发的新手,现在我想将表单中的字符串传递给带有ajax的控制器,但我不知道该怎么办。请问你能帮我吗?这是我的代码: HTML:

public class DataMatch extends Controller{

  public String searchContentMatch (String search) {
    // Search match
    return "HI"+search;
  }

}

控制器:

bot.on('message',function (data) {
   if (data.user != "Uxxxxxx" && data.message === 'message'){
       bot.postMessageToChannel('general', 'Yoooo');
   }

4 个答案:

答案 0 :(得分:0)

将其作为查询参数传递,因为它只是一个字符串。

var search="searchValue";
 $.ajax({
        url: "DataMatch/searchContentMatch?search="+search,  
        type:"GET",
        cache: false,
        dataType:"text",
        success: function (responseData) {  
        s.innerHTML = s.innerHTML + '<li>'+responseData+'</li>';  
        }  
        });

答案 1 :(得分:0)

首先,在$.ajax()的数据参数中,您必须构建一个查询字符串,因此正确的方法是将密钥(“搜索”)与其值(searchValue)连接起来。

然后,您既不需要脚本中的return false语句,也不需要return表单属性上的onsubmit关键字。

最后,由于您正在使用jQuery,请利用其选择功能并将document.getElementById替换为$

<form onsubmit="newSearch();" id="formId">
    <input type="search" placeholder="Search for more" id="searchBar_chat">
</form>
<script type="text/javascript" >
function newSearch(){
    var searchValue = $("#searchBar_chat").val();
    $("#chatDialgue").append('<li>'+ searchValue +'</li>');
    $("#searchBar_chat").val("");
    $.ajax({
        url: "DataMatch/searchContentMatch",  
        type:"GET",
        cache: false,
        dataType: "text",
        data: "search=" + searchValue,
        success: function (responseData) {  
            $("#chatDialgue").append('<li>' + responseData + '</li>');
        }  
    });
}
</script>

答案 2 :(得分:0)

您应该使用Javascript router而不是在Javascript代码中对端点进行硬编码。这将允许您稍后在需要时更改端点名称。此外,您希望传递查询字符串参数,因此它直接在URL中传递。以下是使用反向路线的方法:

@helper.javascriptRouter("jsRoutes")(
    routes.javascript.DataMatch.searchContentMatch
)

//HTML here

var endpoint = jsRoutes.controllers.DataMatch.searchContentMatch(searchValue).url;
$.ajax({
  url: endpoint,  
  type:"GET",
  cache: false,
  success: function (responseData) {  
  s.innerHTML = s.innerHTML + '<li>'+responseData+'</li>';  
  }  
});

答案 3 :(得分:0)

还有一件事,对于上一个答案,请不要忘记路线文件中的参数:

GET    /api/search/:search             controllers.DataMatch.searchContentMatch(search: String)