1

我有以下 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。

很感谢任何形式的帮助!

感谢您的帮助和时间

** * ** * *更新* ** * ** * ** * ** * ** * ** * ** * ** * ** * **

            $(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);
                    }
                });
            };

        });

** * ***第二次更新** * ** * ** * ** * ** * ** * ****

            $(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");
                    }
                });

            };

        });
4

3 回答 3

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 methodlang参数,所以在 ajax 调用中您可能必须指定它。虽然有很多不同的方法可以做到这一点,但我想出了这个解决方案。我试图调用我的 web 方法并且它有效

笔记:

如果它是像这样的有效 json 对象,{'lang':'hi'}那么 jQuery 可能不会将其作为 json 数据发送,而是将其序列化,lang=hi从而导致错误。_以前根本没有通过。

谢谢

于 2013-06-20T15:29:46.990 回答
0

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

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

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

并使用

contentType: "text/html",
于 2013-06-20T15:39:30.140 回答
0

ResolveUrl 会给你请求理解的 url

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");
            }
        });

    };

});
于 2013-06-20T16:04:35.143 回答