如何在jquery中调用web方法

时间:2014-02-12 08:14:28

标签: c# javascript jquery asp.net ajax

这是我的web service方法。

LogGeneralIncidentForm.aspx.cs:

public static List<SelectUsers> GetUsers()
    {
        DataTable dtUsers = SLAFacadeBLL.GetGIMUsers(Constants.GIM_USER_ACTIONS.CANLOG);
        var items = new List<SelectUsers>();

        DataView dvUsers = dtUsers.DefaultView;
        dvUsers.RowFilter = "RESPOND = True";

        if (dvUsers.Count > 0)
        {

            DataTable dt = dvUsers.ToTable();
            foreach (DataRow row in dt.Rows)
            {
                items.Add(new SelectUsers { Value = row["Id"].ToString(), Text = row["Name"].ToString() });
            }

        }
        return items;
    }

这是我的jquery

<script type="text/javascript">
    $(function() {
            var items;

            $.ajax({
                type: "POST",
                url: "LogGeneralIncidentForm.aspx/GetUsers",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {

                    items = msg.d;

                }
            });

        $('#myCheckList').checkList({
            listItems: items,
            onChange: selChange
        });

        function selChange(){
            var selection = $('#myCheckList').checkList('getSelection');

            $('#selectedItems').text(JSON.stringify(selection));
        }


    });
</script>

但我没有在jquery方法中获取用户列表。我的web方法工作正常。怎么做?我的代码有什么问题?任何人都可以给我任何建议吗?

4 个答案:

答案 0 :(得分:1)

下面的代码将根据您的要求在同一个域中工作..

在网页上

<asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="call_service" runat="server" Text="Call Service" OnClientClick="CallService(); return false;" />
<asp:Label ID="lblMsg" runat="server" Text="" />

<script type="text/javascript">
        function CallWebService() {
            $.ajax({
                type: "POST",
                url: "http://......myurl..../WebService.asmx",
                data: "{'name':'" + $("#txt_name").val() + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: ShowData,
                error: error

            });
        }
        function ShowData(data, status) {
            $("#lblMsg").html(data.d);
        }
        function error(request, status) {  
            alert(request.statusText);
        }
    </script>

答案 1 :(得分:0)

您的问题中缺少某些内容,您忘记提及您使用的是jquery.ui.checkList.js

我已经看过这个的源代码,它希望传入的值被命名为value和text:

_addItem: function(listItem){
            var self = this, o = self.options, el = self.element;

            var itemId = 'itm' + (o.icount++);  // generate item id
            var itm = $('<tr/>');
            var chk = $('<input/>').attr('type','checkbox').attr('id',itemId)
                    .addClass('chk')
                    .attr('data-text',listItem.text)
                    .attr('data-value',listItem.value);

            itm.append($('<td/>').append(chk));
            var label = $('<label/>').attr('for',itemId).text(listItem.text);
            itm.append($('<td/>').append(label));
            o.objTable.append(itm);

            // bind selection-change
            el.delegate('.chk','click', function(){self._selChange()});
        }

您需要更改SelectUsers课程,以便通过将Id重命名为value并将Name重命名为text来反映这一点。

<强>更新

在json中使用名称和文本的jsFiddle。

http://jsfiddle.net/Yv99D/

答案 2 :(得分:0)

我可能有很多理由,请查看这篇精彩的文章。 http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods

我甚至怀疑这些可能是原因:

缺少[WebMethod]属性

   [WebMethod]
   public static List<SelectUsers> GetUsers()
   {
   }

在ScriptManager中启用了页面方法

   <asp:ScriptManager ID="scm" runat="server" EnablePageMethods="true" />

答案 3 :(得分:0)

请参阅以下工作示例

//代码隐藏方法声明为静态

[WebMethod]
public static string GetSquare(String value)
{
    return value;
}

您点击此按钮的按钮

<input type="button" id="button" value="Chnageurl" onclick="ajaxcall()" />

这个

的脚本
<script type="text/jscript">

function ajaxcall(e) {

            $.ajax({
            type: "POST",
            url: "Default.aspx/GetSquare",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ value: "Vinay" }),
            dataType: "json",
            success: function (value) {
            alert(value.d);
        },
       error: function () { alert("Ajax Error"); }
     });
  };