通过 ajax 在自动完成查询中发送附加参数
Sending additional parameter in autocomplete query via ajax
自动完成代码有效,但我无法使用实际搜索值过滤输出(耳语记录),因为该参数(d.queryString)不在 ajax 请求中。
我有这个代码,
文本框
<input type="text" name="CustomerNumber" value="@if (@ViewBag.CustomerNumber != null){@ViewBag.CustomerNumber}" />
Jquery 脚本
<script type="text/javascript">
$(document).ready(function () {
$("input[name='CustomerNumber']").autocomplete({
source: function (request, response) {
$.ajax({
dataType: "json",
type: 'GET',
url: '@Url.Action("GetCustomerNames")',
data: function (d) {
d.queryString = $("input[name='CustomerNumber']").val()
},
success: function (data) {
// assuming data is a JavaScript array such as
// ["one@abc.de", "onf@abc.de","ong@abc.de"]
// and not a string
response(data);
}
});
},
minLength: 3
});
});
</script>
.NET 控制器
public JsonResult GetCustomerNames(string searchQuery)
{
var autocompleteList = new List<string>();
using (var db = new DB.APPDBContext())
{
autocompleteList = db.GetAutocompleteList(1, searchQuery).ToList();
}
return Json(autocompleteList, JsonRequestBehavior.AllowGet);
}
如果我键入 3 个字母,我会将所有(未过滤的)记录发送给耳语者,因为参数 queryString(实际文本框值)不会发送到控制器。为什么 ajax 请求中缺少 queryString 参数?
谢谢你的想法
1) 创建一个包含文本框内容的对象:
var queryString = {
searchQuery: $("input[name='CustomerNumber']").val()
}
2) 然后使用$.param
创建一个URL来生成查询字符串:
var url = "@Url.Action("GetCustomerNames")?" + $.param(queryString);
3) 使用在您的 Ajax 方法中生成的 URL:
$("input[name='CustomerNumber']").autocomplete({
source: function (request, response) {
$.ajax({
dataType: "json",
type: 'GET',
url: url,
success: function (data) {
// assuming data is a JavaScript array such as
// ["one@abc.de", "onf@abc.de","ong@abc.de"]
// and not a string
response(data);
}
});
},
minLength: 3
});
自动完成代码有效,但我无法使用实际搜索值过滤输出(耳语记录),因为该参数(d.queryString)不在 ajax 请求中。
我有这个代码, 文本框
<input type="text" name="CustomerNumber" value="@if (@ViewBag.CustomerNumber != null){@ViewBag.CustomerNumber}" />
Jquery 脚本
<script type="text/javascript">
$(document).ready(function () {
$("input[name='CustomerNumber']").autocomplete({
source: function (request, response) {
$.ajax({
dataType: "json",
type: 'GET',
url: '@Url.Action("GetCustomerNames")',
data: function (d) {
d.queryString = $("input[name='CustomerNumber']").val()
},
success: function (data) {
// assuming data is a JavaScript array such as
// ["one@abc.de", "onf@abc.de","ong@abc.de"]
// and not a string
response(data);
}
});
},
minLength: 3
});
});
</script>
.NET 控制器
public JsonResult GetCustomerNames(string searchQuery)
{
var autocompleteList = new List<string>();
using (var db = new DB.APPDBContext())
{
autocompleteList = db.GetAutocompleteList(1, searchQuery).ToList();
}
return Json(autocompleteList, JsonRequestBehavior.AllowGet);
}
如果我键入 3 个字母,我会将所有(未过滤的)记录发送给耳语者,因为参数 queryString(实际文本框值)不会发送到控制器。为什么 ajax 请求中缺少 queryString 参数?
谢谢你的想法
1) 创建一个包含文本框内容的对象:
var queryString = {
searchQuery: $("input[name='CustomerNumber']").val()
}
2) 然后使用$.param
创建一个URL来生成查询字符串:
var url = "@Url.Action("GetCustomerNames")?" + $.param(queryString);
3) 使用在您的 Ajax 方法中生成的 URL:
$("input[name='CustomerNumber']").autocomplete({
source: function (request, response) {
$.ajax({
dataType: "json",
type: 'GET',
url: url,
success: function (data) {
// assuming data is a JavaScript array such as
// ["one@abc.de", "onf@abc.de","ong@abc.de"]
// and not a string
response(data);
}
});
},
minLength: 3
});