Jquery脚本没有遇到WebMethod的问题

时间:2013-06-20 15:02:52

标签: c# jquery asp.net jquery-ui webmethod

我有以下JQuery脚本: -

        <script type="text/javascript">
        $(document).ready(function () {
            $("#languageMenu").change(function () {
                var value = $("#languageMenu option:selected").val();
                setSession(value);
            });

            function setSession(val) {
                alert(val);

                $.ajax({
                    type: "POST",
                    url: "Dashboard.aspx/SetUserCulture",
                    data: JSON.stringify(val),
                    contentType: "application/json;charset=utf-8;",
                    success: function () {
                        __doPostBack('UPMainMenu', '');
                        __doPostBack('UPContent', '');
                    },
                    error: function () {
                        alert("Fail");
                    }
                });
            };

        });

    </script>

然而它总是失败并且永远不会击中我的WebMethod。我在C#中的WebMethod是: -

        [WebMethod(EnableSession = true)]
    public static void SetUserCulture(string lang)
    {
        HttpContext.Current.Session["CurrentUI"] = lang;
        String selectedLanguage = lang;

        Thread.CurrentThread.CurrentCulture =
            CultureInfo.CreateSpecificCulture(selectedLanguage);
        Thread.CurrentThread.CurrentUICulture = new
            CultureInfo(selectedLanguage);

    }

我似乎无法弄清楚为什么它没有击中我的WebMethod。

非常感谢任何帮助!

感谢您的帮助和时间

** * ** * * 更新 < EM> * ** * ** * ** * ** * ** < EM> * ** * ** * ** * ** * ** < /强>

            $(document).ready(function () {


            $("#languageMenu").change(function () {
                var value = $("#languageMenu option:selected").val();
                setSession(value);
            });

            function setSession(lang) {
                alert(lang);
                $.ajax({
                    type: "POST",
                    url: "Dashboard.aspx/SetUserCulture",
                    dataType: "json",
                    data: "{'lang':'" + lang + "'}",
                    contentType: "application/json;charset=utf-8;",
                    success: function (data) {
                        alert(data);
                        __doPostBack('UPMainMenu', '');
                        __doPostBack('UPContent', '');
                    },
                    error: function (e) {
                        console.log(e);
                    }
                });
            };

        });

** * *** 第二次更新 ** * ** * ** * ** * < / EM> ** * ** * ****

            $(document).ready(function () {


            $("#languageMenu").change(function () {
                var value = $("#languageMenu option:selected").val();
                setSession(value);
            });

            function setSession(lang) {
                alert(lang);
                $.ajax({
                    type: "POST",
                    url: "Dashboard.aspx/SetUserCulture",
                    data: "{'lang':'" + JSON.stringify(lang) + "'}",
                    contentType: "application/json;charset=utf-8;",
                    dataType: "json",
                    success: function() {
                        __doPostBack('UPMainMenu', '');
                        __doPostBack('UPContent', '');
                    },
                    error: function() {
                         alert("Fail");
                    }
                });

            };

        });

3 个答案:

答案 0 :(得分:1)

尝试编写$.ajax方法调用,如下所示:

function setSession(val) {
 $.ajax({
        type: "POST",
        url: "Default.aspx/SetUserCulture",
        data: "{'lang':'"+ val + "'}", // Note this portion
        contentType: "application/json;charset=utf-8;",
        success: function (data) {
        alert(data);
        __doPostBack('UPMainMenu', '');
        __doPostBack('UPContent', '');
       },
      error: function (e) {
         console.log(e);
      }
  });
}

由于您的web method传递了lang参数,因此在ajax调用中您可能必须指定该参数。虽然有很多不同的方法可以做到这一点,但我已经提出了这个解决方案。 我尝试调用我的网络方法,但它有效

注意:

如果它是一个有效的json对象,如{'lang':'hi'},则jQuery可能不会将其作为json数据发送,而是将其序列化为lang=hi,从而得到错误。 _以前它根本没有通过。

由于

答案 1 :(得分:0)

Dado说 - 在ajax调用中你必须指定参数名称。

但是你传递的是一个简单的字符串,不需要JSON - 只需跳过

contentType: "application/json;charset=utf-8;",

并使用

contentType: "text/html",

答案 2 :(得分:0)

ResolveUrl会根据请求为您提供网址

var pageUrl = '<%= ResolveUrl("~/Default.aspx")%>';
$(document).ready(function () {

    $("#languageMenu").change(function () {
        var value = $("#languageMenu option:selected").val();
        setSession(value);
    });

    setSession('testing');

    function setSession(lang) {
        alert(lang);
        $.ajax({
            type: "POST",
            url: pageUrl + "/SetUserCulture",
            data: "{'lang':'" + JSON.stringify(lang) + "'}",
            contentType: "application/json;charset=utf-8;",
            dataType: "json",
            success: function () {
                alert('success');
            },
            error: function () {
                alert("Fail");
            }
        });

    };

});