2017-03-09 44 views
1

我是新的与发挥框架和Ajax的网络开发,现在我想通过Ajax的形式传递到控制器的字符串,但我不知道该怎么办。请你帮我在这里是我的代码:? HTML:无法通过ajax传递字符串到控制器

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

控制器:

public class DataMatch extends Controller{ 

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

} 

回答

0

首先,在$.ajax()数据参数,你必须建立一个查询字符串,所以正确的方法是用它的值(searchValue)串接键(“搜索”)。

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

最后,由于您使用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> 
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>'; 
     } 
     }); 
+0

你传递一个静态字符串这种方式,而OP似乎想要传递输入表单的值(尽管代码是错误的)。 –

+0

是的。但是,如果他想要,他可以从输入中获得价值,并在答案中看到它。 – CaptainHere

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>'; 
    } 
}); 
0

一两件事,以前的答案,不要忘了在routes文件参数:

GET /api/search/:search    controllers.DataMatch.searchContentMatch(search: String) 
相关问题