使用jQuery在Web服务中调用Linq到SQL方法

时间:2010-01-24 05:52:48

标签: asp.net jquery ajax wcf

我有一个名为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方法它只是不起作用。也许我做错了什么?提前谢谢你。

1 个答案:

答案 0 :(得分:1)

Web服务期望一个名为“initials”的字符串,并且您正在向它发送一个名为“word”的字符串。很可能它会抛出一个异常,它没有通过预期的参数。

尝试在$ .ajax()调用中添加错误:function()以捕获错误。我还建议安装FireBugFiddler以便能够查看和调试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)服务...一些额外的建议:

  1. 在您的web.config中启用IncludeExceptionDetailInFaults,以便您可以调试发生的任何错误。 ASP.Net服务默认会返回错误,但您需要为WCF明确启用此功能。

  2. 尝试在[OperationContract]属性下添加一个附加属性,以指定您希望发布包含JSON数据的帖子:

    [WebInvoke(Method = "POST",BodyStyle=WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]