我在 stackoverflow 上看到了很多类似的帖子,但都不适合我。我有简单的 AJAX ENABLED WCF 服务,它根据输入返回城市
[OperationContract]
public IEnumerable<string> GetCities(string prefix)
{
string[] cities = new[] { "New York", "Atlanta", "Los Angeles", "Las Vegas", "Arizona", "New Hampshire", "New England" };
if(!String.IsNullOrEmpty(prefix))
{
cities = cities.Where(a => a.ToLower().StartsWith(prefix.ToLower())).ToArray();
}
return cities;
}
现在我尝试使用 jquery ui 的自动完成功能来调用此方法。问题是我必须将前缀参数传递给方法调用,但无论我尝试什么,前缀参数都会作为查询字符串附加到 url 中。这是我的 jQuery 代码
$("input[type=text][id*=autocompleteBox]").autocomplete({
source: function (request, response) {
var dataCity = {'prefix': request.term};
$.ajax({
url: "http://localhost:1939/Cities.svc/GetCities",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(dataCity),
success: function (data) {
response($.map(data, function (item) {
return {
label: data
}
}));
}
});
},
minLength: 0
});
我知道我有 3 个选项来调用远程数据源。 第一个选项是上面的代码,但这样我就将字符串化的 json 结果附加到 url 中。
然后我尝试简单地将服务的 url 传递给源选项,但我得到了相同的结果( term=myinput 附加到 url )。
我无法使用第三个选项(包含本地数据的数组),因为我有很多条目,我不想将它们全部保留在客户端上。
那么如何将前缀参数传递给服务方法?这是可能的吗,或者如果我选择使用 jquery ui 的自动完成小部件,我必须坚持使用 url 附加参数?
最佳答案
我没有看到您的 ajax 调用(type
参数)中指定的 HTTP 方法,因此它默认为 GET,并且 GET 不能有内容。使用 GET 时传递数据的唯一方法是通过 URL 参数。顺便提一句。因为你的方法只是获取数据,所以它应该使用 GET 请求。
因此,不要发送 JSON,而是发送:
var dataCity = "prefix=" + encodeURIComponent(request.term);
关于jquery - 设置 jquery 自动完成源时如何将 JSON 数据传递给 WCF 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10114521/