我有一个名为MySimpleService.svc的测试Web服务,其方法名为:GetUserNamesByInitials。下面是Linq to SQL代码:
[OperationContract]
public static string GetUserNamesByInitials(string initials)
{
string result = "";
//obtain the data source
var testDB = new TestDBDataContext();
//create the query
var query = from c in testDB.TestTables
where c.initials == initials
select c;
//execute the query
foreach (var c in query)
{
result = result + c.full_name;
}
return result;
}
我在页面后面使用了该代码并且运行良好。但是,当我尝试使用jQuery调用它时,我没有得到任何结果,没有任何错误。下面是我在jQuery中使用的代码:
$('#TextBox3').live('keydown', function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 9) {
e.preventDefault();
//call function here
$.ajax({
type: "POST",
url: "/MySimpleService.svc/GetUserNamesByInitials",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: '{"word":"' + $('#TextBox3').val() + '"}',
success: function(data) {
$('#TextBox4').val(data.d);
}
});
}
});
});
我所做的是在一个文本框(TextBox3)中键入用户ID,当我按Tab键时,结果显示在另一个文本框(TextBox4)中。 jQuery调用适用于不调用数据库的其他方法,例如使用它工作的其他Web服务方法:
[OperationContract]
public string ParameterizedConnectionTest(string word)
{
return string.Format("You entered the word: {0}", word);
}
然而,使用Linq方法它只是不起作用。也许我做错了什么?提前谢谢你。
答案 0 :(得分:1)
Web服务期望一个名为“initials”的字符串,并且您正在向它发送一个名为“word”的字符串。很可能它会抛出一个异常,它没有通过预期的参数。
尝试在$ .ajax()调用中添加错误:function()以捕获错误。我还建议安装FireBug或Fiddler以便能够查看和调试AJAX请求和响应。这是更新的$ .ajax()调用,带有正确的参数名称和一个错误函数,如果你打开它,它应该调用你选择的javascript调试器:
$.ajax({
type: "POST",
url: "/MySimpleService.svc/GetUserNamesByInitials",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: '{"initials":"' + $('#TextBox3').val() + '"}',
success: function(data) {
$('#TextBox4').val(data.d);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert('Error!');
debugger; // Will let you see the response in FireBug, IE8 debugger, etc.
}
});
<强>更新强>
所以我只是注意到你正在使用WCF服务而不是普通的ASP.Net(ASMX)服务...一些额外的建议:
在您的web.config中启用IncludeExceptionDetailInFaults,以便您可以调试发生的任何错误。 ASP.Net服务默认会返回错误,但您需要为WCF明确启用此功能。
尝试在[OperationContract]属性下添加一个附加属性,以指定您希望发布包含JSON数据的帖子:
[WebInvoke(Method = "POST",BodyStyle=WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]