Webmethod jquery ajax调用没有返回任何结果

时间:2017-08-02 06:26:01

标签: javascript jquery asp.net ajax webmethod

您好我正在建立一个网络媒体库,

我是一个简单的网络方法,可以从数据库中获取标签。

public class Tags
        {
            public string tag_ID { get; set; }
            public string tag { get; set; }
            public string total_count { get; set; }
        }

        [WebMethod]
        public static List<Tags> GetTags()
        {
            using (SqlConnection conn = new SqlConnection())
            {
                conn.ConnectionString = ConfigurationManager.ConnectionStrings["taggerConnectionString"].ConnectionString;
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.CommandText = "GetTagCount";
                    cmd.Connection = conn;
                    List<Tags> tag = new List<Tags>();
                    conn.Open();
                    using (SqlDataReader sdr = cmd.ExecuteReader())
                    {
                        while (sdr.Read())
                        {
                            tag.Add(new Tags
                            {
                                tag_ID = sdr["tag_ID"].ToString(),
                                tag = sdr["tag"].ToString(),
                                total_count = sdr["total_count"].ToString()
                            });
                        }
                    }
                    conn.Close();
                    return tag;
                }
            }
        }

和我在按钮上调用的javascript单击以在div中显示结果。 但我没有得到任何结果。没有错误也在显示。

 $(document).ready(function () { $('#getTags').click(myFunction); });

        function myFunction() {
            $.ajax({
                type: "POST",
                url: "/App/WebForm1.aspx/GetTags",
                data: '{}',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: OnSuccess,
                failure: function (response) {
                    alert(response.d);
                },
                error: function (response) {
                    alert(response.d);
                }
            });

            function OnSuccess(response) {
                var Tags = response.d;
                $(Tags).each(function () {
                    var tag = this.tag;
                    $("#results").append(" <b>" + tag + "</b>. ");
                })
            };
        }

3 个答案:

答案 0 :(得分:1)

你在cmd.CommandText =&#34; GetTagCount&#34 ;;之后缺少一行。它是cmd.CommandType = CommandType.StoredProcedure;

答案 1 :(得分:0)

在Web.Config中设置:

<system.web.extensions>
    <scripting>
      <webServices>
          <jsonSerialization maxJsonLength="2147483647"/>
      </webServices>
    </scripting>
</system.web.extensions>

您的网络服务代码将是:

public class Tags
{
    public string tag_ID { get; set; }
    public string tag { get; set; }
    public string total_count { get; set; }
}

[WebMethod]
public static void GetTags()
{
    using (SqlConnection conn = new SqlConnection())
    {
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["taggerConnectionString"].ConnectionString;
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = "GetTagCount";
            cmd.Connection = conn;
            List<Tags> tag = new List<Tags>();
            conn.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                while (sdr.Read())
                {
                    tag.Add(new Tags
                    {
                        tag_ID = sdr["tag_ID"].ToString(),
                        tag = sdr["tag"].ToString(),
                        total_count = sdr["total_count"].ToString()
                    });
                }
            }
            conn.Close();

            System.Web.Script.Serialization.JavaScriptSerializer jSearializer = new System.Web.Script.Serialization.JavaScriptSerializer();

            string result = jSearializer.Serialize(tag);
            System.Web.HttpContext.Current.Response.ContentType = "application/json";
            System.Web.HttpContext.Current.Response.Write(result);
            System.Web.HttpContext.Current.Response.End();                    
        }
    }
}

答案 2 :(得分:0)

我想我找到了解决方案。

当我尝试使用chrome的网络标签进行故障排除时..我得到了这个结果。

{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}

我从中了解到它因为模板中的配置

在App_Start / RouteConfig.cs中这一行:

settings.AutoRedirectMode = RedirectMode.Permanent;

在其中一篇关于SO(Authentication failed during call webmethod from jquery.ajx with AspNet.FriendlyUrls and AspNet.Identity

的帖子中

有人建议对此发表评论。

现在已经完成了。任何人都可以建议专业人士评论这条线的缺点。如果从安全角度来看它不是一个好主意,任何解决方法。?